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();
相关推荐
東隅已逝,桑榆非晚26 分钟前
算法3.双指针法-快乐数
c++·笔记·学习·算法
欢欢李1 小时前
【LTE L3 笔记 01】LTE空口特点
笔记·无线通信·物理层·lte·空口协议
li星野1 小时前
Regular and Irregular Nouns — One-Page A4 Notes
学习
ZZHow10242 小时前
神经网络与深度学习笔记_Day1
人工智能·pytorch·笔记·python·深度学习·神经网络·机器学习
ACP广源盛139246256732 小时前
选型笔记:HDMI2.1 四进一出切换中继方案 GSV6705@ACP 评估
笔记·硬件架构·硬件工程·视频·国产芯片
Z21-X2 小时前
云原生运维实战笔记:华为云存储类服务全景解析——EVS、OBS、SFS与CBR深度实践
运维·笔记·学习·云原生·华为云
1314lay_10073 小时前
ABAP 程序性能优化总结
经验分享·笔记·性能优化
视觉小萌新14 小时前
AI Class 3 · Chapter 1:变量、字符串、list/dict、if/for(python学习-小白版-有经验可跳过)
python·学习·list
yyyang8817 小时前
蓝牙系统整体架构详解
学习·信息与通信
程序边界17 小时前
一台数据集成软件的拆解笔记(下):一致性、容错、跑批与迁移,KFS 真正难的地方在这
java·前端·笔记