我尝试使用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);
}
}
答案 0 :(得分:3)
据我所知,您的代码运行正常。您的客户正在打印null
的原因是它没有收到任何输入本身。
让我们描述你在高层次沟通的场景。
你有两个节目;服务器和客户端。服务器正在主动侦听对它的任何输入,并且客户端将输入发送到服务器。这个过程是(到目前为止)单向的,我们编写代码的方式,我们只是在服务器上写任何东西。
现在,您有两个与套接字通信的通道:输入和输出。回想一下,我们正在将数据发送到服务器,并且服务器没有向客户端发送任何数据。这意味着:
那就是说,你客户端的代码是多余的:
InputStreamReader Ir = new InputStreamReader(socket2.getInputStream());
BufferedReader Br = new BufferedReader(Ir);
String message = Br.readLine();
System.out.println(message);
这样做的原因是你的客户端没有输入任何信息,因此任何 突然显示的消息确实会出现奇怪的事情。