我想为客户端和服务器建立套接字连接以显示文件列表。但是下面的代码不会从服务器获取任何输入或将输出提供给客户端。请帮忙。
服务器
package javaapplicationthread; import java.net.ServerSocket; import java.net.Socket; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import java.io.IOException; import java.io.PrintWriter; public class zs { public static int reads,red; public static void main(String[] args) { int flg=0; try{while(true){ ServerSocket serverSocket = new ServerSocket(1312); Socket clientSocket = serverSocket.accept(); BufferedReader bufferedReader; PrintWriter outk=new PrintWriter(clientSocket.getOutputStream(),true); bufferedReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String inputLine = bufferedReader.readLine(); System.out.println("input is"+ inputLine); outk.write("abc"); File inputFolder = new File(inputLine); System.out.println("control is being sent to traverse"); traverse(inputFolder, ""); } } catch (IOException ex) { System.out.println("my exception is"+ex) System.out.println(leftIndent + parentNode.getName()); } }}
在客户端,当您这样做时,redd = b.readLine();您要求阅读整行。但是在服务器中,您没有发送整行:您只要求它写三个字符:
redd = b.readLine();
outk.write("abc");
但是,实际上这三个字符都不发送,因为PrintWriter会临时缓冲它们。要解决此问题,请将该行更改为:
outk.println("abc");
要么:
outk.write("abc\n"); outk.flush();
更改之后,客户端成功显示:result is abc。
result is abc
它没有给出任何错误
它们都给错误…readLine调用失败时,客户端引发异常。服务器在开始while(true)循环的下一次迭代并尝试重新创建仍在使用的套接字时会引发异常。您可能想将ServerSocket的创建移到while循环之外。
while(true)