如何解决Java Socket 编程:基于事件的多线程聊天服务器
我想创建一个多线程聊天服务器。
假设有服务器、客户端 1、客户端 2 和客户端。如果客户端 3 向服务器发送“Hello”,则服务器应该向客户端 1、客户端 2 和客户端 3 发送“我收到:你好”。
我目前的方法可以实现:如果client1向服务器发送“Hello”,服务器可以向client1发送“我收到:Hello”,但不能向client2和client3发送。
我怎样才能实现我的目标?
我的部分服务器代码是:
try (ServerSocket server = new ServerSocket(port)){
System.out.println("Waiting for client connection-");
while (true){
Socket client = server.accept();
System.out.println("Client applies for connection");
Thread t = new Thread(() -> {
try {
serveClient(client);
} catch (IOException e) {
e.printstacktrace();
}
});
t.start();
}
}
serveClient 在哪里
public void serveClient(Socket client) throws IOException {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(client.getoutputStream()));
while (true){
// read
String line = reader.readLine();
System.out.println("I received "+line);
// write
writer.write("I received " + line);
writer.newLine();
writer.flush();
}
} catch (IOException e) {
e.printstacktrace();
}
}
我的部分客户端代码是:
try (Socket socket = new Socket(hostname,port)){
// create writer
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getoutputStream()));
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Scanner sc = new Scanner(system.in);
while (true) {
System.out.print("Enter a String: ");
String str = sc.nextLine();
// send to server
writer.write(str);
writer.newLine();
writer.flush();
// get result from server
String res = reader.readLine();
System.out.println("Server response: "+ res);
}
} catch (UnkNownHostException e) {
e.printstacktrace();
System.exit(-1);
} catch (IOException e) {
e.printstacktrace();
System.exit(-1);
}
}
预先感谢您的帮助! 一哥
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。