Java 网络通信编程:服务器多任务连接与广播消息实现
在之前的文章中,我们学习了网络编程的基础知识。今天,我们将进入实践阶段,动手搭建自定义的服务器和客户端,重点实现服务器的多任务连接与消息广播功能。
1. 自定义客户端 (MClient)
首先,我们来搭建自定义客户端,与运行在本地(127.0.0.1),端口为 2000 的服务器进行连接,并获取它的输入输出流。
Socket socket = new Socket("127.0.0.1", 2000);
System.out.println("连接服务器");
is = socket.getInputStream();
os = socket.getOutputStream();
之后考虑发送与读取消息,将它们分别包装成方法体。
- 发送消息时需注意在字符串末尾拼接换行让每条信息正确排版。通过调用输出流的 write() 方法,存储由字符串转为字节数组的消息,再用 flush() 方法确保强制写入。
- 我们可以利用一定长度的缓存区来读取消息,read() 方法会读取消息并存储到括号里的 bytes 数组中,用 String msg = new String(bytes);定义 msg,可以将 byte 数组直接转为字符串,最后通过 trim() 方法返回消去多余空位的字符串。
//发送消息方法体
public void sendMsg(String msg) throws Exception {
String str = msg + "\r\n"; //拼接换行
os.write(str.getBytes());
os.flush();
}
//读取消息方法体
public String readMsg() throws Exception {
byte[] bytes = new byte[1024]; //保存消息的缓存区
is.read(bytes);
String msg = new String(bytes); //将 byte 数组转为字符串
return msg.trim(); //去除空位
}
由于客户端在发送消息的同时需要实时接收服务端的消息,我们应该开启一个独立线程。接收消息则需要从控制台读取对应的每一行输入。






