我是java的新手并学习如何创建一个简单的服务器/客户端echo程序,但它似乎没有正常运行。相反,当我运行服务器然后客户端它在“网络正在读取...”后卡住了,但服务器实际上没有返回任何东西。感谢任何帮助,下面是我的服务器和客户端代码。
客户端:
import java.util.*;
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try{
Socket socket = new Socket("localhost", 1234);
PrintWriter out = new PrintWriter(socket.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Scanner s = new Scanner(System.in);
String input;
while ((input = s.next())!= null){
// String input = s.next();
out.println(input);
System.out.println("Networking is reading....");
System.out.println(in.readLine());
System.out.println("please");
}
} catch (Exception e){
e.printStackTrace();
}
}
}
服务器:
import java.net.*;
import java.util.*;
import java.io.*;
public class Server {
public static void main(String[] args) {
try{
ServerSocket serverSocket = new ServerSocket(1234);
Socket clientSocket = serverSocket.accept();
PrintWriter out = new PrintWriter(clientSocket.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String line;
while ((line = in.readLine()) != null){
// String line = in.readLine();
out.println(line);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
试试这个
PrintWriter out = new PrintWriter( socket.getOutputStream(), true );
从docs,这里的true将启用自动刷新。
当您需要逐行发送数据时,启用autoflush非常有用。
<强>替代强>
另一种方法是手动将缓冲液冲洗到电线上。
out.flush();
原因是你在本地机器上写入一个缓冲区 - 它只会在你刷新缓冲区时发送一帧数据。