服务器在客户端 – 服务器应用程序中不接收消息

在我的客户端 – 服务器应用程序中,客户端向服务器发送消息,服务器应显示消息。 但就我而言,客户端只能发送但服务器无法实现。

我尝试过不同的端口号(即8080,8000,4444等)。 看来套接字可以设置连接,但我真的不知道为什么服务器无法读取客户端的输入。

这是我的完整项目(我已经忽略了这两个应用程序的主要类,因为我只有调用方法):

EchoServer.java:

package client.server; import java.io.*; import java.net.*; public class EchoServer { public EchoServer() { } public void establish() { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(8080); } catch (IOException e) { System.out.println("Could not listen on port: 1234"); System.exit(-1); } Socket clientSocket = null; try { clientSocket = serverSocket.accept(); } catch (IOException e) { System.out.println("Accept failed: 1234"); System.exit(-1); } PrintWriter out = null; BufferedReader in = null; try { out = new PrintWriter( clientSocket.getOutputStream(), true); in = new BufferedReader( new InputStreamReader( clientSocket.getInputStream())); } catch (IOException ioe) { System.out.println("Failed in creating streams"); System.exit(-1); } String inputLine, outputLine; try { while ((inputLine = in.readLine()) != null) { out.println(inputLine); if (inputLine.equals("Bye.")) { break; } } } catch (IOException ioe) { System.out.println("Failed in reading, writing"); System.exit(-1); } try { clientSocket.close(); serverSocket.close(); } catch (IOException e) { System.out.println("Could not close"); System.exit(-1); } } } 

EchoClient.java:

  package server.client; import java.io.*; import java.net.*; public class EchoClient { public EchoClient() { } public void establish() { Socket echoSocket = null; PrintWriter out = null; BufferedReader in = null; try { //echoSocket = new Socket(InetAddress.getLocalHost(), 1234); echoSocket = new Socket(InetAddress.getLocalHost(), 8080); out = new PrintWriter(echoSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader( echoSocket.getInputStream())); } catch (UnknownHostException e) { System.err.println("Don't know about host."); System.exit(1); } catch (IOException e) { System.err.println("Couldn't get I/O"); System.exit(1); } BufferedReader stdIn = new BufferedReader( new InputStreamReader(System.in)); String userInput; try { while ((userInput = stdIn.readLine()) != null) { out.println(userInput); if (userInput.equals("Bye.")) { break; } System.out.println("echo: " + in.readLine()); } out.close(); in.close(); stdIn.close(); echoSocket.close(); } catch (IOException ioe) { System.out.println("Failed"); System.exit( -1); } } } 

您的服务器不会将传入的文本写入控制台,而只会返回到尚未处理来自服务器的传入文本的客户端。

(out不是System.out而是Socket.out!)

在您的服务器中,您正在使用while循环中的readLine()进行侦听

 while ((inputLine = in.readLine()) != null) { System.out.println("inputLine "+inputLine); 

这只不过是来自客户的输入流。 上述SOP将打印来自客户端的消息。 尝试刷新流,因为在缓冲区已满之前不会打印。

代码似乎没问题。 如果你在服务器端和客户端都在PrintWriter上写一些东西,你就会得到输出。

在服务器中添加以下代码:(使用accept()API创建Socket后)

 out.println("Hello from Server"); 

在客户端添加以下代码(创建Socket后)

 out.println("Hello from client"); 

其他建议:

1)在服务器上接受套接字连接后创建一个线程,该线程应该处理所有IO处理

2)创建Socket with Server后,也可以在客户端创建线程。 新线程应该处理所有IO处理