【发布时间】:2019-05-21 18:44:21
【问题描述】:
我有一个相当简单的多线程聊天程序,其中服务器从多个客户端接收数据,然后应该将消息转发回所有客户端。
虽然服务器确实正确接收了所有数据,但我似乎无法让客户端接收返回值。
我已经阅读了大量来自 StackOverflow 和其他论坛的代码和建议,但我似乎找不到问题。
ServerThread 有 PrintWriter “out”,这样声明和抓取:
private PrintWriter out;
public PrintWriter getWriter(){
return out;
}
public void run() {
try{
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader (new InputStreamReader(socket.getInputStream()));
ServerThread 中的这个方法应该传递数据:
if(input != null){
//Loggs message to file:
loggMessage(input);
//Loggs message to Server GUI
setOutput(input);
//Prints message to Output
System.out.println(input);
//Sends message to other clients:
for(ServerThread c : UserList){
System.out.println("Client discovered");
PrintWriter clientwriter = c.getWriter();
clientwriter.write(input);
System.out.print(input + " <-- was written to client");
}
}
控制台(和文件)按预期获取所有消息,但客户端没有。据我所知,这要么是由于这批代码中的那一行有问题,要么是客户端有问题
客户端:
in = new BufferedReader (new InputStreamReader(socket.getInputStream()));
“in”是这样声明的,在以下代码块之前的几行:
if(in.ready()){
String serverin = in.readLine();
System.out.println(serverin);
setOutput(serverin);
}
这个 system.out.print 不打印任何东西。这让我相信 if 中已经出现了问题,但我不确定那会是什么。
所以,客户端不会收到消息,我不知道为什么。 当程序运行时,服务器指示已找到所有客户端并适当地发送消息,但它们不会收到任何信息。
有什么想法吗?
【问题讨论】:
标签: java sockets printwriter