Java学习笔记十四(网络通信)

1 获取本机信息

(1) 本机信息类:InetAddreass net = InetAddress.getLocalHost();

(2) 本机计算机名:net.getHostName();

(3) 本机IP地址:net.getHostAddress();

2 UDP传输协议

注释:单向传输,不可靠

2.1 客户端

java 复制代码
// 建服务器连接信息
byte[] addr = {-64, -88, 0, 109};  // 192.168.0.109 (127以上用值减256例:192-256=-64)
InetAddress serverNet = InetAddress.getByAddress(addr);
// 指定服务器端口号
int serverPort = 8081;

// 创建客户端通信类(端口随机):
DatagramSocket ds = new DatagramSocket();

// 等待控制台输入,传输数据
Scanner s = new Scanner(System.in);			
String str = s.nextLine();			
while(!"exit".equals(str)) {			
    byte[] datas = str.getBytes();			
    DatagramPacket sp = new DatagramPacket(
        datas, 
        datas.length, 
        serverNet, 
        serverPort);			
    ds.send(sp);	// 发送数据
    str = s.nextLine();			
}			
ds.close();			

2.2 服务器

java 复制代码
// 创建服务器通信类
DatagramSocket ds = new DatagramSocket(8081);//服务器端口(随意指定,但客户端需指定)

byte[] datas = new byte[1024*64]; // 指定1次接收最大数据量
DatagramPacket sp = new DatagramPacket(datas, datas.length);					
while(true) {					
    ds.receive(sp);					// 等待接收数据,接收到再继续执行
    sp.getPort();					// 获取到客户端端口号
    String str = new String(datas, 0, sp.getLength());	 // 接收到数据
}					

3 TCP传输协议

3.1 客户端

java 复制代码
// 创建通信类		
Socket s = new Socket("192.168.0.109", 8081); // 指定服务器IP端口号
OutputStream os = s.getOutputStream();					
// 控制台输入传输数据		
Scanner sc = new Scanner(System.in);					
String str = sc.nextLine();					
while (!"exit".equals(str)) {					
	os.write(str.getBytes());	// 输出流将数据写到服务器
	os.flush();					// 刷出缓存
	str = sc.nextLine();					
}					
os.close();					
s.close();					

3.2 服务器

java 复制代码
// 创建通信类		
ServerSocket ss = new ServerSocket(8081);	// 定义服务器端口号

// 等待客户端连接		
Socket s = ss.accept();					
// 读取客户端数据		
while(true) {					
	InputStream is = s.getInputStream();					
	byte[] datas = new byte[1024*64];					
	int len;					
	String str = "";					
	while((len = is.read(datas))!=-1) {		// 客户端close后输入流停止读取
		 str = new String(datas, 0, len);					
	}					
	is.close();					
	s.close();					
	s = ss.accept();	// 等待下一次客户端连接
}					

4 多客户端连接

Socket获取输出流,可以给客户端发信息,实现聊天功能。群聊(服务器管理多个客户端Socket,获取对应的输出流发消息)

java 复制代码
while(true) {			
    Socket s = ss.accept(); // 循环获取客户端连接
    线程类(s);			    // 让线程类处理s通信
}			

5 处理浏览器请求

(1) 浏览器:http:ip:端口 访问服务器ServerSocket

(2) 服务器响应:输出http格式字符串

java 复制代码
PrintStream ps = new PrintStream(socket.getOutputStream());
ps.println("HTTP/1.1 200 OK");
ps.println("Content-Type:text/html;charset=UTF-8");
ps.println();
ps.print("<html>...</html>");
socket.close();
相关推荐
一木 之林9 小时前
微信小程序开发全攻略·文章版|00 总览:74集学习路径与知识地图
人工智能·学习·计算机视觉·微信小程序·小程序
小陈phd9 小时前
深入理解agent学习笔记(六)——提示工程-优化系统提示词
笔记·学习
霖霖7149 小时前
【ESP32笔记】RGB灯WS2812实验
笔记·单片机·mcu·物联网
Aurora_eye9 小时前
Git 笔记
笔记·git
yi0119 小时前
DAY28: LeetCode 111. 二叉树的最小深度
人工智能·笔记·python·算法·leetcode·二叉树·递归
诸神缄默不语10 小时前
小春学习日刊 2026年第1期:2026.10.13
学习
xxwl58510 小时前
三、区域赛算法模版第三章---字符串相关算法
笔记·学习·算法
卿卿的产品经理日记10 小时前
【AI产品经理实战】Day 37|拆开 JSON 与 EXE:数据都有格式
人工智能·笔记·python·json·产品经理
辣知11 小时前
辣知·化智80 《道德经》和光同尘的智慧
学习
wdfk_prog11 小时前
LWIP教程 15:IPv4 与 IPv6——从网络层工作原理到嵌入式工程取舍
运维·开发语言·网络·笔记·学习·智能路由器·ip