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();
相关推荐
AAA代码批发商1 小时前
DAYS 38 TCP并发服务器模型详解
linux·网络·笔记·学习
zyf1044161 小时前
暑期实践日志 Day46:复盘第六章,规整对应实践成果
学习·计算机网络·剪辑·暑期实践·课题任务
wdfk_prog2 小时前
canopennode-rtt推荐,不只可以做从站,也可以承担主站角色
c语言·开发语言·数据库·学习·算法·深度优先
启观川2 小时前
Python基础-第 16 章 综合案例:客户信息管理系统
开发语言·笔记·python·正则表达式
边境悍匪2 小时前
蜗牛学苑 Java 智能体学习 Day34|AOP 进阶、权限思维导图复盘
java·开发语言·spring boot·学习
WK100%2 小时前
LeetCode双题:滑动窗口破解最小子数组
c++·经验分享·笔记·算法
sheeta19982 小时前
LeetCode 每日一题笔记 日期:2026.09.02 题目:3875.构造奇偶一致的数组 I
笔记·算法·leetcode
风123456789~2 小时前
【架构专栏】4.7 信息安全的抗攻击技术 3/4
笔记·系统架构设计
UIU1142 小时前
CPU、RAM与外设寄存器
学习