Java聊天室之实现获取Socket功能
作者:小虚竹and掘金 发布时间:2023-09-19 03:57:10
标签:Java,聊天室,Socket
一、题目描述
题目实现:获取远程服务器和客户机的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
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 项目中遇到C#调用C++算法库的情况,C++内部运算结果返回矩形坐标数组(事先长度未知且不可预计),下面方法适用于访问C++内部分配的任何结
- 本文实例讲述了java实现word文档转pdf并添加水印的方法。分享给大家供大家参考,具体如下:前段时间,项目需要自动生成word文档,用W
- 在工作中要求将图片上传至本地,如下代码将介绍如何将图片上传至本地准备工作:环境:eclipse4.5-x64,jdk1.7-x64,mave
- vs2005中总是保留最近打开的项目和文件的记录,甚至是以删除的它也不删,-_-!下面介绍几种删除的方法:第一种:建立一个bat文件,以后双
- 本文实例讲述了Java使用Iterator迭代器遍历集合数据的方法。分享给大家供大家参考,具体如下:1、使用迭代器遍历ArrayList集合
- 1、效果2、简介本文主角是ItemTouchHelper。它是RecyclerView对于item交互处理的一个「辅助类」,主要用于拖拽以及
- Spring多配置文件有什么好处? 按照目的、功能去拆分配置文件,可以提高配置文件的可读性与维护性,如将配置事务管理、数据源等少改动的配置与
- 本文介绍的仿IOS对话框的实现,先来看一下效果图具体代码如下:public class AlertDialog { private Cont
- 使用try-with-resource机制关闭连接JAVA的一大特性就是JVM会对内部资源实现自动回收即自动GC,给开发者带来了极大的便利。
- 1、安装依赖<dependency> <
- 视频演示:springboot+vue音乐网站摘要网络技术以及计算机的发展,网友们对网络的要求也日益长高,平常在网上听话用一大堆下载软件下载
- 一、问题重现1.配置文件spring: #DataSource数据源 datasource: &nbs
- java static块和构造函数的实例详解构造函数不写时,若该类继续了某个类则会默认集成父类的构造函数。 构造函数在实例化类时执行内部,O
- 本文主要包括以下内容:使用Xfermode设置圆角图片使用BitmapShader设置圆角图片滑动旋转缩放的bimp图片图片颜色处理(滑动)
- 1. 启动入口本系列RocketMQ4.8注释github地址,希望对大家有所帮助,要是觉得可以的话麻烦给点一下Star哈前面我们已经分析完
- 前言兄弟们,刚刚又给seata社区修了一个BUG,有用户提了issue反应TransactionHook在某些情况下不会被调用:相关issu
- 最近比较无聊,随便翻着博客,无意中看到了有的人用VBS读文本内容,也就是读几句中文,emmm,挺有趣的,实现也很简单,都不需要安装什么环境,
- 问题是这样的,我用eclipse发送httpclient请求如下没有问题,但是在idea中就返回400,为毛呢???excuse me?pa
- 本文实例为大家分享了C#实现语音播报功能的具体代码,供大家参考,具体内容如下环境:window10vs2019 16.5.5.netfram
- 递归三要素:1、明确递归终止条件;2、给出递归终止时的处理办法;3、提取重复的逻辑,缩小问题规模。1、1+2+3+…+nimport jav