我想在Eclipse中使用java做一个简单的服务器和客户端程序,但每当我运行程序两个控制台输出null。我不知道为什么会发生这种情况。我读到一个常见的问题是我已经创建了一个服务器实例,并且正在尝试创建另一个实例,但我相信那不是问题。我也读过,我可能没有root访问权限,并且需要使用高于1024的端口,所以我做了,而且我仍然有同样的错误。Java套接字测试返回空值
Server代码:
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);
}
}
这里没有'套接字测试'。您的客户**打印**为空,因为它正在从已经被对等关闭的连接中读取而没有发送任何内容。 – EJP
尽管存在缺陷,但我不确定为什么这是一个可怕的问题......它具有易于编译的代码,并且至少是从未使用套接字编程的人的症状。 – Makoto
你的代码的一些注意事项:Java中的类名应该使用[PascalCase](https://pl.wikipedia.org/wiki/PascalCase)和变量shoud使用[camelCase](https://en.wikipedia.org/wiki /骆驼香烟盒)。 – Turing85