gpt4 book ai didi

Java 多线程服务器客户端

转载 作者:行者123 更新时间:2023-11-30 04:53:46 26 4
gpt4 key购买 nike

我有一个问题,我目前正在做一个小项目,却发现了一个死胡同。我有一个 Java 服务器:

import java.io.*;
import java.net.*;

class TCPServer
{
public static void main(String argv[]) throws Exception
{
ServerSocket welcomeSocket = new ServerSocket(3443);
Socket clientSocket =null;
ClientHandler ch;
while(true)
{
try{
clientSocket = welcomeSocket.accept();
System.out.println("Client connected on port :"+clientSocket.getPort());
ch = new ClientHandler (clientSocket);
Thread t = new Thread(ch);
t.start();
}catch (Exception e){
System.out.println("SERVER CRASH");
}
}
}
}

然后客户端通过3443端口连接,用ClientHandler创建一个新线程。现在的问题是,在客户端,用于连接的套接字仍在端口 3443 上,但在服务器端,线程位于任意端口上,比方说 5433,因此服务器可以与线程通信,但不能与客户端通信,因为它不知道线程正在使用哪个端口...我对这一切有点困惑,客户端类是否只需要进行初始连接,然后所有通信都是通过 ClientHandler 类完成的,如果那么我还应该在客户端类中实例化一个 ClientHandler 对象吗?

这是我的客户类别:

import java.io.*;
import java.net.*;

class TCPClient
{

static Socket clientSocket = null;

public static void main(String argv[]) throws Exception
{
BufferedReader k = new BufferedReader(new InputStreamReader(System.in));
BufferedReader ine = null;
DataOutputStream oute = null;
try{
clientSocket = new Socket("localhost", 3443);
oute = new DataOutputStream(clientSocket.getOutputStream());
ine = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
} catch (UnknownHostException e) {
System.out.println("Unknown host");
System.exit(1);
} catch (IOException e) {
System.out.println("No I/O");
System.exit(1);
}



try{
//send
oute.writeBytes(k.readLine());
//recieve
String line = ine.readLine();
System.out.println("Text received: " + line);

} catch (IOException e){
System.out.println("Read failed");
System.exit(1);
}

}
}

问题是客户端中创建的套接字仍然连接到端口 3443,并且服务器正在监听该端口,因此我不会从服务器收到任何内容(无限循环)。 clientHandler 在另一个端口上。我做错了吗?

最佳答案

您调用了 accept() 两次。仅调用一次,并将生成的 Socket 存储在一个变量中,然后您可以将该变量交给 new ClientHandler()

哦,还有,Socket 知道通信的双方,因此它不会被客户端使用的任何端口混淆。

关于Java 多线程服务器客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9227475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com