一些关于java socket通信编程的实例解释
1.需求:客户端实现步骤:
创建客户端的socket对象,请求与服务端的连接。
使用socket对象调用getOutputStream()方法得到字节输出流
使用字节输出流完成数据的发送
释放资源:关闭socket管道
1 | import java.io.IOException; |
2.需求:客户端接收消息
1.注册端口
2.连接socket通信管道,用端口接受信息
3.使用缓冲字符输入流接收消息
实例代码:
1 | import java.io.IOException; |
1 | import java.io.BufferedReader; |
3.需求:使用TCP通信方式实现:多发多收
具体要求:
可以使用死循环服务端手腕消息继续wait next message client can use 死循环 等待用户不断输入信息 客户端一旦输入exit关闭客户端程序,并且释放资源
4.服务端实现同时处理多个客户端请求
模型:
主线程定义循环负责接收客户端Socket管道连接
每接受到一个Socket通信管道就分配一个独立的线程负责处理
服务端:
1 | public class ServerDemo2 { |
客户端:
实现多发多收:
1 | public class ClientDemo1 { |
线程类:
实现多个客户端发送消息的处理
1 | public class ServerReaderThread extends Thread{ |
4.线程池优化方案
实际开发中针对于客户端与服务端之间的通不可能为每一个客户端与服务端开一个进程,所以对小型应用平台开发会用线程池进行通信技术的优化。
客户端代码保持不变,主要在服务端上面进行优化
服务端:
1 | public class ServerDemo2 { |
Runnable任务类
1 | public class ServerReaderRunnable implements Runnable{ |
通信实战案例–即时通信(学习历程)
在上面实例中添加客户端接受转发消息功能。
需求:
1.客户端添加独立线程实现接受转发消息
2.服务端对收到的消息进行转发
关键点:定义管道socket队列list,每有一个客户端就加入一个socket进入list,在服务端进行转发的过程中将消息转发给每个客户端。
Client客户端:
1 | public class ClientDemo1 { |
server端:
1 | public class ServerDemo2 { |
Tip:
即时通信的含义
即时通信是指一个客户端的消息发出,其他客户端也可以收到
即时通信需要进行端口转发的设计思想
服务端需要把在线的socket管道存储起来
一旦受到消息就要推送给其他管道