如果我发送消息,只有在我循环运行时才会打印出来。
我尝试在1分钟后发送消息,发送50次,但没有任何内容会在服务器端打印出来。
我的错误是什么?
这是我的代码,它是用Netbeans编写的:
package me.jackboyplay.jc_cloudsystem.mechaniken;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author JackboyPlay
*/
public class SocketClient extends Thread {
private Socket socket;
public SocketClient(Socket socket){
this.socket = socket;
System.out.println("Ein Client wurde akzeptiert.");
}
@Override
public void run() {
BufferedReader br;
PrintWriter pw;
try {
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw = new PrintWriter(socket.getOutputStream());
while(true){
String line = br.readLine();
System.out.println(line);
}
} catch (IOException ex) {
Logger.getLogger(SocketClient.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Internal Server Error
Class 1是向服务器发送消息的客户端。
Class 2是将打印出消息的服务器。
答案 0 :(得分:0)
服务器正在使用BufferedReader.readLine()
,但客户端没有发送任何换行符,因此readLine()
永远不会返回:
读取一行文字。一条线被认为是由换行符('\ n'),回车符('\ r')或回车符后面的任何一个终止。
客户端应该使用PrintWriter.println()
而不是PrintWriter.write()
:
通过写行分隔符字符串来终止当前行。行分隔符字符串由系统属性
line.separator
定义,不一定是单个换行符('\ n')。
dos.println("X: " + i);
打印字符串然后终止该行。此方法的行为就像调用
print(String)
然后调用println()
。
或者,使用PrintWriter.print()
根据需要编写值,然后在完成时调用PrintWriter.println()
:
dos.print("X: ");
dos.print(i);
dos.println();
无论哪种方式,您可能还需要调用PrintWriter.flush()
来实际通过网络发送输出:
dos.flush();