1

我对任何类型的网络编程都不熟悉。请您回答以下问题。

我正在使用 Java。

设想

线程 1:

Socket s = new Socket("remote machine", portNum);
//get the outputstream and write **"Message 1"**, close it.

线程 2:

Socket s = new Socket("remote machine", portNum);    
//get the outputstream and write **"Message 2"**, close it.

可以确定线程 1 在线程 2 实时之前打开套接字并将消息发送到远程机器。

是否保证“远程机器”以相同的顺序读取它们,即读取消息1,然后读取消息2

注意:订单是有保证的,因为线程 1 在发送消息 1 后,向线程 2 发送批准以继续。

4

1 回答 1

2

试着把网络想象成某种东西

a) 异步 b) 不可靠 c) 不可控

所以,当你发送一些东西时,事情会在不可控的情况下并行发生。当您向远程机器发送内容时,甚至不能保证数据(初始和数据 - 参见 TCP)通过相同的路径传输。

TCP 可以很好地管理单个连接的顺序传输,但不能很好地管理两个连接。如果您使用/需要两个到同一个服务器/端口,您通常会这样做,因为您希望它们是独立的。您正在使用 Java 编程,尝试在单个 tcp-socket-connection 上同步/调度以保证交付顺序,并使用多个并行运行事物。

于 2012-10-25T17:37:30.367 回答