【发布时间】:2018-09-05 13:55:53
【问题描述】:
我写了一个简单的套接字程序,但是服务器没有打印出任何东西。
客户:
public class ChatClient {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("localhost", 9001);
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
Scanner reader = new Scanner(System.in);
while (true) {
String test = reader.next();
out.write(test);
System.out.println(test);
//String line = in.readLine();
}
}
}
服务器:
public class ServerApplication {
private static final int PORT = 9001;
private static HashSet<String> names = new HashSet<String>();
private static HashSet<PrintWriter> writers = new HashSet<PrintWriter>();
public static void main(String[] args) throws Exception {
ServerSocket listener = new ServerSocket(PORT);
try {
while (true) {
System.out.println("Server starts!");
new ChatThread(listener.accept()).start();
}
} finally {
}
}
}
public class ChatThread extends Thread{
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public ChatThread(Socket socket){
this.socket = socket;
}
@Override
public void run() {
try {
System.out.println("Thread Starts!");
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
while(true){
System.out.println("Getting input!");
String input = in.readLine();
System.out.println("test");
if (input!=null){
//out.print(input);
System.out.println(input);}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我应该如何解决这个问题,所以当我在客户端输入“Hello”时,服务器将使用 system.out.println() 打印出“Hello”?
【问题讨论】:
-
你得到了什么输出?
-
我没有得到任何输出。我只得到:服务器启动!服务器启动!话题开始!获得输入! (之后就没有了!)
-
你是在服务器之后启动客户端吗?
-
会不会是防火墙?
-
在客户端,写完之后,按照@ScaryWombat的建议,out.write("\r\n")。然后调用 out.flush()
标签: java sockets serversocket