ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

实现服务端接收多个客户端的消息_(重点)

2022-04-01 20:02:23  阅读:168  来源: 互联网

标签:Socket sk socket new 接收 public 服务端 客户端


如何实现服务端接收多个客户端的消息

1.主线程定义了循环负责接收客户端Socket管道连接

2.每接收到一个Socket通信管道后分配一个独立的线程负责处理它。

 

 

客户端

public class ClientDemo1 {
public static void main(String[] args) {
try {
//1. 创建Socket通信管道请求有服务端的链接
//public Socket(String host, int port)
//参数一:服务端的IP地址
//参数二:服务端的端口
Socket socket = new Socket("127.0.0.1",9999);

//2.从socket通信管道中得到一个字节输出流, 负责发送数据
OutputStream os = socket.getOutputStream();

//3.把低级的字节流包装成打印流
PrintStream printStream = new PrintStream(os);

Scanner sc = new Scanner(System.in);
//4.发送消息
while(true){
System.out.println("请说:");
String rs = sc.nextLine();
printStream.println(rs);
printStream.flush();
}

} catch (IOException e) {
e.printStackTrace();
}
}
}
===
服务端
public class ServerDemo2 {
public static void main(String[] args) {
try {
//1.注册端口
ServerSocket serverSocket = new ServerSocket(9999);

//a.定义一个死循环由主线程负责,不断地接受客户端的Socket管道的连接
while (true) {
//每接收到一个客户端的Socket管道, 交给一个独立的子线程负责读取消息
Socket socket = serverSocket.accept();
System.out.println(socket.getRemoteSocketAddress()+"上线了");
new ServerReader(socket).start();

}
} catch (IOException e) {
e.printStackTrace();
}
}
}
===
线程
class ServerReader extends Thread{
private Socket sk;

public ServerReader(Socket sk) {
this.sk = sk;
}

@Override
public void run() {

try {
InputStream is = sk.getInputStream();
//4.把字节输入流包装成缓冲字符输入流进行消息的接收
InputStreamReader inputStreamReader = new InputStreamReader(is);//转换流(将字节输入流转换成字符输入流)
BufferedReader br = new BufferedReader(inputStreamReader);
//按行读取消息
String rs;
while ((rs = br.readLine()) != null){
System.out.println(sk.getRemoteSocketAddress()+"说了"+rs);
}
} catch (IOException e) {
System.out.println(sk.getRemoteSocketAddress()+"下线了");
}
}
}

标签:Socket,sk,socket,new,接收,public,服务端,客户端
来源: https://www.cnblogs.com/LZYBOK/p/16088721.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有