【发布时间】:2020-08-25 15:05:35
【问题描述】:
所以我每次在客户端控制台中输入内容时都会尝试发送多行代码。但是,这样做时它只会在服务器中打印一次客户端的输出,我想做的是每次输入一行后在服务器中打印客户端的输出。
客户:
try {
Scanner scanner = new Scanner(System.in);
DataInputStream inputStream = new DataInputStream(socket.getInputStream());
DataOutputStream outputStream;
System.out.println("Write something to client:");
while(scanner.hasNext()) {
System.out.println("Write something to client:");
outputStream = new DataOutputStream(socket.getOutputStream());
String message = scanner.nextLine();
outputStream.writeUTF(message);
}
} catch (IOException e) {
System.out.println("[ERROR] Unable to get streams from server");
}
}
客户端线程:
@Override
public void run() {
try {
DataInputStream inputStream = new DataInputStream(socket.getInputStream());
DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());
System.out.println(inputStream.readUTF());
} catch (IOException e) {
e.printStackTrace();
}
}
服务器: 公共服务器() {
try {
serverSocket = new ServerSocket(port);
System.out.println("[SERVER] Server initialized successfully");
// consider using!
Runtime.getRuntime().addShutdownHook(new Thread());
} catch (IOException e) {
System.out.println("[ERROR] Unable to launch server on port " + port);
}
while (true) {
Socket socket = null;
try {
socket = serverSocket.accept();
} catch (IOException e) {
System.out.println("[ERROR] Unable to accept client request");
}
System.out.println("[SERVER] New user joined the chat: " + socket);
groupCounter++;
ClientThread client = new ClientThread("Client " + groupCounter, socket);
Thread thread = new Thread(client);
thread.start();
groupClients.add(client);
//System.out.println(groupCounter);
}
【问题讨论】:
-
“它只在服务器上打印客户端的输出一次”是什么意思?是因为服务器关闭了套接字吗?你能告诉我们你是如何创建套接字对象的吗?
-
没有服务器不会关闭它的套接字,但如果我在客户端控制台输入中输入内容,它只会在服务器控制台中打印一次。我想做的是对于我在客户端控制台中打印的每一行,我想让它也出现在服务器控制台中。我添加了一些代码来展示我如何处理套接字对象
-
那么,是因为客户端停止了执行吗?您还在 Client 类中使用 while(true) 吗?
-
while(true) 循环在客户端没有帮助,但扫描器不会连续写入 hasNext while 循环看起来的输出流。
标签: java networking client-server