目录
2.2.4 TCP协议服务端同时接收多个客户端消息实现(重点)
1.概念
1.1 IP地址
1.1.1 IPV4
1.1.2 IPV6
1.2 IP地址操作类
1.3 端口号
2.传输协议
2.1 UDP协议
2.1.2 UDP协议使用及其API
示例:
发送端:
接收端:
扩展:
多发多收可以用while死循环来实现,一边不断发数据,一边不断接收数据
2.1.3 UDP广播、组播
UDP实现广播:
UDP实现组播:
2.2 TCP协议
2.2.1 TCP协议客户端(一发一收)实现及其API
示例:
客户端:
注意:字节输出流这里用print会报错,因为服务端接受的是一行数据,这里要改成println;一般在退出时才关管道,否则可能导致数据还没传到服务端管道就关闭了。
2.2.2 TCP协议服务端(一发一收)实现及其API
示例:
注意:如果客户端只发了一条信息的话服务端用if()接收才不会报错,如果用while()接收的话会导致客户端关闭时服务端因接收不到一行数据而报错。
2.2.3 TCP协议多发多收实现
原理:使用一个死循环不断发送和接收消息。
2.2.4 TCP协议服务端同时接收多个客户端消息实现(重点)
示例:
客户端代码不变。
原理:引入多线程处理,服务端每接收到一个socket管道都将其扔给一个线程处理。
注意:当客户端退出后会因为客户端管道关闭而报错,解决方式是在线程的catch{}中删掉e.printStackTract()。
2.2.5 TCP通信模型,线程池优化
示例:
客户端代码不变。
Runnable继承类代码与上面ServerReaderThread类run()方法一样。
原理:在服务端创建线程池,将接收到的socket管道扔给线程池对象处理。
2.2.6 TCP通信模型,即时通信的实现
示例:
客户端代码:
在每个创建的线程中定义一个死循环用于接收服务端发来的消息
服务端代码:
用一个集合存取所有连接的socket管道
在方法中遍历集合中的socket管道对象并把接收到的消息发送过去
2.2.7 模拟BS系统
示例: