Java聊天室之实现获取Socket功能
作者:小虚竹and掘金 时间:2023-09-19 03:57:10
一、题目描述
题目实现:获取远程服务器和客户机的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
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 xiaoxuzhu2022/5/31 Create
* </pre>
* @date 2022/5/31
*/
public class ServerSocketFrame extends JFrame {
private JTextArea ta_info;
private ServerSocket server; // 声明ServerSocket对象
private Socket socket; // 声明Socket对象socket
public void getserver() {
try {
server = new ServerSocket(9527); // 实例化Socket对象
ta_info.append("服务器套接字已经创建成功\n"); // 输出信息
while (true) { // 如果套接字是连接状态
ta_info.append("等待客户机的连接......\n"); // 输出信息
socket = server.accept(); // 实例化Socket对象
ta_info.append("连接成功......\n");
}
} catch (Exception e) {
e.printStackTrace(); // 输出异常信息
}
}
public static void main(String[] args) { // 主方法
ServerSocketFrame frame = new ServerSocketFrame(); // 创建本类对象
frame.setVisible(true);
frame.getserver(); // 调用方法
}
public ServerSocketFrame() {
super();
setTitle("服务器端程序");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 336, 257);
final JScrollPane scrollPane = new JScrollPane();
getContentPane().add(scrollPane, BorderLayout.CENTER);
ta_info = new JTextArea();
scrollPane.setViewportView(ta_info);
}
}
ClientSocketFrame
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 xiaoxuzhu2022/5/31 Create
* </pre>
* @date 2022/5/31
*/
public class ClientSocketFrame extends JFrame { // 创建类继承JFrame类
private Socket socket; // 声明Socket对象
private JTextArea ta = new JTextArea(); // 创建JtextArea对象
public ClientSocketFrame() { // 构造方法
super(); // 调用父类的构造方法
setTitle("获取Socket信息");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 351, 257);
final JScrollPane scrollPane = new JScrollPane();
getContentPane().add(scrollPane, BorderLayout.CENTER);
scrollPane.setViewportView(ta);
}
private void connect() { // 连接套接字方法
ta.append("尝试连接......\n"); // 文本域中信息信息
try { // 捕捉异常
socket = new Socket("127.0.0.1", 9527); // 实例化Socket对象
ta.append("完成连接。\n"); // 文本域中提示信息
InetAddress netAddress = socket.getInetAddress();// 获得远程服务器的地址
String netIp = netAddress.getHostAddress();// 获得远程服务器的IP地址
int netPort = socket.getPort();// 获得远程服务器的端口号
InetAddress localAddress = socket.getLocalAddress();// 获得客户端的地址
String localIp = localAddress.getHostAddress();// 获得客户端的IP地址
int localPort = socket.getLocalPort();// 获得客户端的端口号
ta.append("远程服务器的IP地址:" + netIp + "\n");
ta.append("远程服务器的端口号:" + netPort + "\n");
ta.append("客户机本地的IP地址:" + localIp + "\n");
ta.append("客户机本地的端口号:" + localPort + "\n");
} catch (Exception e) {
e.printStackTrace(); // 输出异常信息
}
}
public static void main(String[] args) { // 主方法
ClientSocketFrame clien = new ClientSocketFrame(); // 创建本例对象
clien.setVisible(true); // 将窗体显示
clien.connect(); // 调用连接方法
}
}
服务器启动,等待连接
客户端连接上
服务器提示,客户端连接成功
来源:https://juejin.cn/post/7155620878191951880
标签:Java,聊天室,Socket
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java由浅入深带你精通继承super
2023-11-23 02:34:28
![](https://img.aspxhome.com/file/2023/7/59737_0s.png)
Java8内存模型PermGen Metaspace实例解析
2023-11-25 10:53:36
![](https://img.aspxhome.com/file/2023/8/59968_0s.jpg)
mybatis中使用oracle关键字出错的解决方法
2022-05-14 10:19:23
Java Swing JCheckBox复选框的实现方法
2023-03-18 17:14:10
![](https://img.aspxhome.com/file/2023/4/129254_0s.gif)
解决Tomcat启动报异常java.lang.ClassNotFoundException问题
2023-07-27 03:33:01
![](https://img.aspxhome.com/file/2023/1/100061_0s.png)
Java面向对象之猜拳游戏
2022-10-29 21:26:45
![](https://img.aspxhome.com/file/2023/8/80208_0s.jpg)
Android模块化中数据传递/路由跳转实现示例
2023-06-29 03:12:06
c#动态加载卸载DLL的方法
2023-06-08 08:18:08
基于WPF实现简单放大镜效果
2022-02-15 23:19:12
![](https://img.aspxhome.com/file/2023/3/111123_0s.png)
c#中的常用ToString()方法总结
2023-01-13 01:18:30
Android自定义可标记日历效果
2022-09-06 04:11:22
![](https://img.aspxhome.com/file/2023/0/114330_0s.jpg)
Spring MVC数据绑定方式
2023-03-18 03:06:55
unity实现场景切换进度条显示
2022-05-16 20:56:42
![](https://img.aspxhome.com/file/2023/5/104305_0s.jpg)
maven环境变量配置讲解
2023-11-29 12:35:51
![](https://img.aspxhome.com/file/2023/3/60683_0s.png)
Flink开发IDEA环境搭建与测试的方法
2023-02-21 21:20:46
![](https://img.aspxhome.com/file/2023/0/84270_0s.jpg)
详解Android中Runtime解决屏幕旋转问题(推荐)
2022-04-03 03:12:02
Android 开发程序锁应用简单实例
2021-10-07 07:41:34
![](https://img.aspxhome.com/file/2023/4/139224_0s.png)
Android中实现水平滑动(横向滑动)ListView示例
2021-09-07 18:15:03
C++实现幸运大抽奖(QT版)
2021-09-15 21:32:00
![](https://img.aspxhome.com/file/2023/8/124048_0s.jpg)
java操作solr实现查询功能的实例
2023-08-04 10:41:34
![](https://img.aspxhome.com/file/2023/0/95940_0s.png)