一、题目描述
题目实现:获取远程服务器和客户机的IP地址和端口号。
二、解题思路
创建一个服务器类:ServerSocketFrame,继承JFrame类
写一个getserver() 方法,实例化Socket对象,启用9527当服务的端口。
创建一个客户端类:ClientSocketFrame,继承JFrame类。
写一个connect() 方法,实例化Socket对象,连接本地服务的9527端口服务。
获得远程服务器的地址:socket.getInetAddress();
获得远程服务器的IP地址 :netAddress.getHostAddress()
获得远程服务器的端口号:socket.getPort()
获得客户端的地址:socket.getLocalAddress()
获得客户端的IP地址:localAddress.getHostAddress()
获得客户端的端口号:socket.getLocalPort()
三、代码详解
ServerSocketFrame
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package com.xiaoxuzhu; import java.awt.BorderLayout; import java.net.*; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; /** * Description: * * @author xiaoxuzhu * @version 1.0 * * <pre> * 修改记录: * 修改后版本 修改人 修改日期 修改内容 * 2022/5/31.1 xiaoxuzhu 2022/5/31 Create * </pre> <p> * @date 2022/5/31<br> */ </p> <p> public class ServerSocketFrame extends JFrame {<br> private JTextArea ta_info;<br> private ServerSocket server; // 声明ServerSocket对象<br> private Socket socket; // 声明Socket对象socket</p> <p> public void getserver() {<br> try {<br> server = new ServerSocket( 9527 ); // 实例化Socket对象<br> ta_info.append( "服务器套接字已经创建成功n" ); // 输出信息<br> while ( true ) { // 如果套接字是连接状态<br> ta_info.append( "等待客户机的连接......n" ); // 输出信息<br> socket = server.accept(); // 实例化Socket对象<br> ta_info.append( "连接成功......n" );<br> }<br> } catch (Exception e) {<br> e.printStackTrace(); // 输出异常信息<br> }<br> }</p> <p> public static void main(String[] args) { // 主方法<br> ServerSocketFrame frame = new ServerSocketFrame(); // 创建本类对象<br> frame.setVisible( true );<br> frame.getserver(); // 调用方法<br> }</p> <p> public ServerSocketFrame() {<br> super ();<br> setTitle( "服务器端程序" );<br> setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br> setBounds( 100 , 100 , 336 , 257 );</p> <p> final JScrollPane scrollPane = new JScrollPane();<br> getContentPane().add(scrollPane, BorderLayout.CENTER);</p> <p> ta_info = new JTextArea();<br> scrollPane.setViewportView(ta_info);<br> }<br> }</p> |
ClientSocketFrame
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | package com.xiaoxuzhu; import java.awt.BorderLayout; import java.net.*; import javax.swing.*; import javax.swing.JScrollPane; /** * Description: * * @author xiaoxuzhu * @version 1.0 * * <pre> * 修改记录: * 修改后版本 修改人 修改日期 修改内容 * 2022/5/31.1 xiaoxuzhu 2022/5/31 Create * </pre> <p> * @date 2022/5/31<br> */ </p> <p> public class ClientSocketFrame extends JFrame { // 创建类继承JFrame类<br> private Socket socket; // 声明Socket对象<br> private JTextArea ta = new JTextArea(); // 创建JtextArea对象</p> <p> public ClientSocketFrame() { // 构造方法<br> super (); // 调用父类的构造方法<br> setTitle( "获取Socket信息" );<br> setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br> setBounds( 100 , 100 , 351 , 257 );<br> final JScrollPane scrollPane = new JScrollPane();<br> getContentPane().add(scrollPane, BorderLayout.CENTER);<br> scrollPane.setViewportView(ta);<br> }</p> <p> private void connect() { // 连接套接字方法<br> ta.append( "尝试连接......n" ); // 文本域中信息信息<br> try { // 捕捉异常<br> socket = new Socket( "127.0.0.1" , 9527 ); // 实例化Socket对象<br> ta.append( "完成连接。n" ); // 文本域中提示信息<br> InetAddress netAddress = socket.getInetAddress(); // 获得远程服务器的地址<br> String netIp = netAddress.getHostAddress(); // 获得远程服务器的IP地址<br> int netPort = socket.getPort(); // 获得远程服务器的端口号<br> InetAddress localAddress = socket.getLocalAddress(); // 获得客户端的地址<br> String localIp = localAddress.getHostAddress(); // 获得客户端的IP地址<br> int localPort = socket.getLocalPort(); // 获得客户端的端口号<br> ta.append( "远程服务器的IP地址:" + netIp + "n" );<br> ta.append( "远程服务器的端口号:" + netPort + "n" );<br> ta.append( "客户机本地的IP地址:" + localIp + "n" );<br> ta.append( "客户机本地的端口号:" + localPort + "n" );<br> } catch (Exception e) {<br> e.printStackTrace(); // 输出异常信息<br> }<br> }</p> <p> public static void main(String[] args) { // 主方法<br> ClientSocketFrame clien = new ClientSocketFrame(); // 创建本例对象<br> clien.setVisible( true ); // 将窗体显示<br> clien.connect(); // 调用连接方法<br> }<br> }</p> |
服务器启动,等待连接
客户端连接上
服务器提示,客户端连接成功
到此这篇关于Java聊天室之实现获取Socket功能的文章就介绍到这了,更多相关Java聊天室内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!