【发布时间】:2015-11-06 13:24:24
【问题描述】:
我知道以前有人问过这个问题,并且我尝试了不同的解决方案,但我陷入了实现部分.. :(
当前多个客户端可以连接到服务器,我使用了 javadocs 中的多线程 KnockKnock 服务器/客户端示例,并对其稍作编辑,以便您可以将消息发送到服务器,它会将它们回显给您,但我希望能够做到这一点,如果客户端 1 发送消息,那么服务器会将它们广播回连接到服务器的所有客户端。
我试着环顾四周,看到和我现在处于相同位置的人,他们被告知要制作一个列表来跟踪所有连接,然后遍历列表并发送消息,但是我真的不知道该放在哪个班级,也不知道如何处理。
如果有人可以告诉我或者只是给我提示我应该从哪里开始,我将不胜感激,因为我现在真的只是卡住了:(
这是我目前所处的位置:
服务器:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class Server {
public static void main(String[] args) throws IOException {
boolean listening = true;
try (ServerSocket serverSocket = new ServerSocket(4444)) {
while (listening) {
ServerThread thread = new ServerThread(serverSocket.accept());
thread.start();
}
} catch (IOException e) {
System.err.println("Could not listen on port " );
System.exit(-1);
}
}
}
服务器线程
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class ServerThread extends Thread{
private Socket socket = null;
public ServerThread(Socket socket) {
super("MultiServerThread");
this.socket = socket;
}
public void run() {
try (
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
) {
while (true) {
String input = in.readLine();
System.out.println(input);
out.println("ecco " + input);
if (input.equals("Bye"))
break;
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户(不确定是否有必要,但无论如何都是这样)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public static void main(String[] args) throws IOException {
try (
Socket kkSocket = new Socket("172.30.242.51", 4444);
PrintWriter out = new PrintWriter(kkSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(kkSocket.getInputStream()));
) {
BufferedReader stdIn =
new BufferedReader(new InputStreamReader(System.in));
while (true) {
if(in != null) {
String input = stdIn.readLine();
out.println("Client: " + input);
System.out.println(in.readLine());
out.flush();
}
}
} catch (UnknownHostException e) {
System.err.println("Don't know about host " );
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to " );
System.exit(1);
}
}
}
周末愉快=)
【问题讨论】:
标签: java multithreading sockets serversocket