gpt4 book ai didi

java - TCP套接字连接

转载 作者:行者123 更新时间:2023-12-01 23:23:47 25 4
gpt4 key购买 nike

我是网络通信新手,我正在尝试构建客户端-服务器应用程序。

protected void init(){
Server myServer = new Server();
Client myClient = new Client();
}

这是我的客户端类:

public class Client {

public Client() {
init();
}

private void init() {
Socket echoSocket = null;
DataOutputStream os = null;
DataInputStream is = null;
DataInputStream stdIn = new DataInputStream(System.in);

try {
echoSocket = new Socket("localhost", 1234);
os = new DataOutputStream(echoSocket.getOutputStream());
is = new DataInputStream(echoSocket.getInputStream());

os.writeInt(stdIn.readInt());

echoSocket.getOutputStream().close();
echoSocket.getInputStream().close();
echoSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

这就是服务器:

public class Server {

public Server() {
init();
}

private void init() {
try {
boolean run = true;
ServerSocket ss = new ServerSocket(1234);
Socket s = ss.accept();
DataInputStream dis = new DataInputStream(s.getInputStream());
System.out.println(dis.readInt());
s.getInputStream().close();
s.getOutputStream().close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}

}

}

首先:我可以像我一样初始化客户端和服务器吗? new Server()new Client()

问题2:我首先初始化的内容重要吗?客户端还是服务器?

问题3:当我在客户端首次初始化的情况下编译此代码时,我变成连接被拒绝:连接。我知道这意味着您尝试连接的端口上没有正在运行的监听套接字。我认为这就是为什么服务器必须先行的原因。是这样吗?我可以使用 setSoTimeout 修复它吗?如何修复?

问题4:当我用服务器然后客户端编译它时,输出什么也没有。我认为这与客户端无关,因为例如,如果我尝试打印“1”,它也不起作用。我认为它只是等待客户并且不执行任何后续操作。我怎样才能解决这个问题?也许 setSoTimeout 也放在这里?

最佳答案

不能在同一个线程中同时拥有客户端和服务器。

正如您已经观察到的,服务器接受连接并尝试读取某些内容。它不知道客户端正在同一个线程中运行。

要么创建一个多线程应用程序,其中客户端和服务器都有自己的线程。或者制作两个彼此独立运行的程序。后者也是“正常情况”。

关于java - TCP套接字连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20315409/

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