gpt4 book ai didi

Java套接字端口号自行更改

转载 作者:行者123 更新时间:2023-12-01 20:24:48 24 4
gpt4 key购买 nike

客户端

try {
Socket sock = new Socket("localhost", Integer.parseInt(args[0]));
System.out.println(sock.getLocalAddress());
System.out.println(sock.getLocalPort());
ObjectInputStream ois = new ObjectInputStream(sock.getInputStream());
ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());
oos.writeInt(55);
ois.readInt();
} catch (Exception e) {e.printStackTrace();}

服务器

try {
ServerSocket ss = new ServerSocket(1234);
Socket sock = ss.accept();
System.out.println(sock.getLocalAddress());
System.out.println(sock.getLocalPort());
ObjectInputStream ois = new ObjectInputStream(sock.getInputStream());
ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());

System.out.println(ois.readInt());

oos.close();
} catch (Exception e) {e.printStackTrace();}

我按顺序运行服务器,然后运行客户端。我将 1234 作为命令行参数传递给客户端。换句话说,我这样执行线程

java server
java client 1234

这样做会将这些内容打印到控制台

// server
/127.0.0.1
1224

// client
/127.0.0.1
50261

两个线程都不会从此时开始继续前进。这是怎么回事?

最佳答案

Java socket port number changes on its own

不,没有。您正在查看两个不同的套接字和两个不同的端口。连接由两个端点组成。客户端socket的localPort是50261,这是出站端口,而服务器端接受的socket的localPort是1234,与正在发送的端口相同听过。

查看相应的 getRemotePort() 值。您将看到客户端的端口是 1234,服务器的端口是 50261,或者更确切地说,它与客户端的 localPort 一致,无论您下次运行它是什么。

Neither threads move on from this point. What's going on here?

您需要在 ObjectInputStream 之前构造 ObjectOutputStream,原因在 Javadoc 和此处的许多答案中都有解释,例如 this one

关于Java套接字端口号自行更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44037017/

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