Java 在CMD下运行客户端类时出现客户端-服务器连接错误,但使用netcat命令可以正常工作
我有一个服务器类,它扩展了线程,正在等待端口888上的连接:Java 在CMD下运行客户端类时出现客户端-服务器连接错误,但使用netcat命令可以正常工作,java,connection,client-server,Java,Connection,Client Server,我有一个服务器类,它扩展了线程,正在等待端口888上的连接: public void run() { // Create our server and create / accept incoming connections try { ServerSocket serverSocket = new ServerSocket(serverPortNumber); while (true) {
public void run() {
// Create our server and create / accept incoming connections
try {
ServerSocket serverSocket = new ServerSocket(serverPortNumber);
while (true) {
// Listen for incoming connections and craete connection with accept
System.out.println("Waiting for client connection.... on localhost port " + serverPortNumber
+ ". \n Client connect via netcat localhost 8818");
Socket clientSocket = serverSocket.accept();// returns a client Socket object
System.out.println("Conenction established with " + clientSocket);
// Each new connection will be handled on a new thread and can run concurrenlty
ManageMultipleConnections multipleConnections = new ManageMultipleConnections(this, clientSocket);
clientList.add(multipleConnections);
multipleConnections.start();
}
} catch (IOException error) {
error.printStackTrace();
}
I如果启动CMD,则使用netcat建立连接,如下所示:
nc localhost 8818
从中返回套接字
Socket clientSocket = serverSocket.accept();
然后将clientSocket添加到MangeMultipleCOnnections类,该类也是一个线程
ManageMultipleConnections multipleConnections = new ManageMultipleConnections(this, clientSocket);
clientList.add(multipleConnections);
multipleConnections.start();
ManageMultipleSections然后获取客户端的输入和输出流,并处理通信:
clientInput = clientSocket.getInputStream();
clientoutput = clientSocket.getOutputStream();
writer = new PrintWriter(clientoutput, true);
对于多聊天服务器-客户机,这一切都可以正常工作,其中每个客户机连接都是通过netcat建立的
但是,如果我试图通过在CMD上运行java客户端类,在同一本地主机端口888上与服务器建立连接:
java testClient
一旦执行了serverSocket.accept(),连接就会立即关闭。
clientConnection类:
public static void main(String[] args) {
// connects to a well know time server on port 13 and gets data back in tme
Socket socket;
String hostname;
if (args.length > 0) {
hostname = args[0];
}else {
hostname = "localhost";
}
try {
System.out.println("Trying to connect to " + hostname + " on port " + 8818);
socket = new Socket(hostname, 8818);
System.out.println("Connected on " + socket.getInetAddress() + " " );
}catch(UnknownHostException e) {
System.out.println("Cant connect to " + hostname);
}catch(IOException e) {
e.printStackTrace();
}
}
例外情况:
java.net.SocketException:对等方重置连接:套接字写入错误
因此,我无法再通过CMD与客户通信。
欢迎您的任何意见
更多信息:
在此处的ManageMultipleConnections线程中引发异常:
clientInput = clientSocket.getInputStream();
clientoutput = clientSocket.getOutputStream();
writer = new PrintWriter(clientoutput, true);
try {
if (loginMessage == null) {
clientoutput.write((message).getBytes());
} else {
clientoutput.write((message).getBytes());
clientoutput.write((loginMessage).getBytes());
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
哪一方抛出此异常?无论是哪种类型,对等方都会在不读取其输入的情况下关闭连接。例如,这个客户机甚至都懒得关闭套接字。@user207421请参阅其他信息,它似乎是在尝试写入输出流时抛出的。是的,所以这一切与我前面所说的完全一样。