Java套接字测试返回null值

时间:2015-07-19 21:05:19

标签: java sockets

我尝试使用java在Eclipse中创建一个简单的服务器和客户端程序,但每当我运行该程序时,两个控制台都输出null。我不知道为什么会这样。我读到一个常见的问题是我已经创建了一个服务器实例,并且我正在尝试创建另一个实例,但我确定这不是问题所在。我还读到我可能没有root访问权限,需要使用高于1024的端口,所以我做了,我仍然有同样的错误。

服务器代码:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Socket_Server_Side {
   public static void main(String [] args) throws Exception {
      Socket_Server_Side server = new Socket_Server_Side();
      server.run();
   }

   public void run() throws Exception {
      ServerSocket SvrSocket = new ServerSocket(1025);
      SvrSocket.setReuseAddress(true);
      Socket socket = SvrSocket.accept();
      InputStreamReader Ir = new InputStreamReader(socket.getInputStream());
      BufferedReader Br = new BufferedReader(Ir);

      String message = Br.readLine();
      System.out.println(message);

      if (message != null) {
          System.out.println("Message succesfully sent and recieved!");
        }
    }
}

客户代码:

 import java.io.BufferedReader;
 import java.io.InputStreamReader;
 import java.io.PrintStream;
 import java.net.Socket;

 public class Socket_Client_Side {
    public static void main(String [] args) throws Exception{
       Socket_Client_Side client = new Socket_Client_Side();
       client.run();
     }

    public void run() throws Exception {
       Socket socket2 = new Socket("localhost", 1025);
       PrintStream Ps = new PrintStream(socket2.getOutputStream());
       Ps.println("Hello Server");
       InputStreamReader Ir = new InputStreamReader(socket2.getInputStream());
       BufferedReader Br = new BufferedReader(Ir);

       String message = Br.readLine();
       System.out.println(message);
     }
 }

1 个答案:

答案 0 :(得分:3)

据我所知,您的代码运行正常。您的客户正在打印null的原因是它没有收到任何输入本身

让我们描述你在高层次沟通的场景。

你有两个节目;服务器和客户端。服务器正在主动侦听对它的任何输入,并且客户端将输入发送到服务器。这个过程是(到目前为止)单向的,我们编写代码的方式,我们只是在服务器上写任何东西。

现在,您有两个与套接字通信的通道:输入和输出。回想一下,我们正在将数据发送到服务器,并且服务器没有向客户端发送任何数据。这意味着:

  • 服务器应该只关心输入,而不是与输出有关。
  • 客户应该只关心输出,而不是与输入有关。

那就是说,你客户端的代码是多余的:

InputStreamReader Ir = new InputStreamReader(socket2.getInputStream());
BufferedReader Br = new BufferedReader(Ir);

String message = Br.readLine();
System.out.println(message);

这样做的原因是你的客户端没有输入任何信息,因此任何 突然显示的消息确实会出现奇怪的事情。