Java 为什么服务器程序在线冻结';String file=br.readLine()';?
我不熟悉套接字编程。我必须编写一个程序,客户端从用户那里接受文件名并将其发送到服务器。服务器读取相应的文件并将其内容发送回客户端。现在我的问题是服务器程序冻结在“String file=br.readLine()”上。当我终止客户端程序时,会执行更多行的服务器代码。如果我在客户端代码的末尾注释掉while循环,服务器代码工作得非常好(它将数据打印到标准输出)。你能告诉我我的代码有什么问题吗? 服务器代码:Java 为什么服务器程序在线冻结';String file=br.readLine()';?,java,sockets,Java,Sockets,我不熟悉套接字编程。我必须编写一个程序,客户端从用户那里接受文件名并将其发送到服务器。服务器读取相应的文件并将其内容发送回客户端。现在我的问题是服务器程序冻结在“String file=br.readLine()”上。当我终止客户端程序时,会执行更多行的服务器代码。如果我在客户端代码的末尾注释掉while循环,服务器代码工作得非常好(它将数据打印到标准输出)。你能告诉我我的代码有什么问题吗? 服务器代码: public class SocketServer { public stati
public class SocketServer {
public static void main(String[] args) throws Exception{
System.out.println("Server is started.");
ServerSocket ss = new ServerSocket(9999);
System.out.println("Server is waiting for a client.");
Socket server = ss.accept();
System.out.println("Client is connected.");
BufferedReader br = new BufferedReader(new InputStreamReader(server.getInputStream()));
String file = br.readLine();
System.out.println("Requested file is: " + file);
OutputStreamWriter os = new OutputStreamWriter(server.getOutputStream());
PrintWriter writer = new PrintWriter(os);
BufferedReader fr = new BufferedReader(new FileReader(file));
String line;
while((line = fr.readLine()) != null) {
writer.write(line);
writer.flush();
System.out.println(line);
}
}
}
客户端代码:
public class SocketClient {
public static void main(String[] args) throws Exception {
Scanner in = new Scanner(System.in);
Socket client = new Socket("localhost", 9999);
OutputStreamWriter os = new OutputStreamWriter(client.getOutputStream());
PrintWriter writer = new PrintWriter(os);
System.out.print("Enter filename: ");
String file = in.nextLine();
writer.write(file);
writer.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.println("Content of " + file + ":");
String str;
while((str = br.readLine()) != null) {
System.out.print(str);
}
System.out.println("File transfer is complete.");
}
}
br.readLine()代码>将等待输入,直到找到新行
writer.write(文件)代码>您正在写入文件名,但没有新行
所以为了让它工作,要么在客户端写一个换行符,要么在服务器上逐字符读取
希望这有帮助。br.readLine()代码>将等待输入,直到找到新行
writer.write(文件)代码>您正在写入文件名,但没有新行
所以为了让它工作,要么在客户端写一个换行符,要么在服务器上逐字符读取
希望这有帮助。您需要一个调试器。我使用了调试器。它显示了服务器程序冻结的行。您需要一个调试器。我使用了调试器。它显示了服务器程序冻结的行。