【发布时间】:2019-06-29 11:13:54
【问题描述】:
嘿,我正在编写一个带有服务器套接字和多个客户端的简单代码,服务器获取每个客户端的用户名并将它们存储在 hashmap 中。服务器接受套接字客户端,客户端输入用户名,但服务器再次接受相同的套接字客户端,它想要它的用户名,代码在这里停止。我希望它可以为多个客户端工作,而不仅仅是一个。
服务器类:
public class Server implements Serializable{
// [..]
public void serverConnect() throws IOException, ClassNotFoundException
{
listener = new ServerSocket(9090);
System.out.println("Server is running...");
while (true)
{
System.out.println("Waiting ...");
socket=listener.accept();
for (Socket socket:socketList.keySet())
{
if (this.socket==socket)
{
checkSocket=false;
}
}
if (checkSocket)
{
socketList.put(socket,socketNumber);
System.out.println("Client is connected");
inputReader = new InputStreamReader(socket.getInputStream());
reader = new BufferedReader(inputReader);
user = reader.readLine();
Server.userList.add(user);
socketNumber++;
}
checkSocket=true;
}
}
}
客户端类:
public class Client {
public Client() {
}
public void clientConnect() throws UnknownHostException, IOException {
System.out.println("enter your username");
Scanner scanner = new Scanner(System.in);
String msg = scanner.nextLine();
Socket socket = new Socket("localhost", 9090);
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
writer.println(msg);
}
}
【问题讨论】:
-
我不知道谁会浏览你的整个代码帖子,特别是因为你没有为我们隔离问题,但我建议你不要在客户端的
while (true)循环中重新创建流.之前创建一次,然后在循环中使用它们。 -
另外,你的服务器不需要为它接受的每个客户端创建一个新线程吗?
-
只是不关心 serverthread 和 clientthread 他们是为了另一个目的,但我的意思是服务器接受套接字客户端并且客户端输入用户名但服务器再次接受相同的套接字客户端并且它想要它的用户名和代码在这里停止。我希望它适用于多个客户端,而不仅仅是一个。