我对任何类型的网络编程都是新手。请您回答以下问题。
我正在使用 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 发送了继续进行的批准。
最佳答案
尝试将网络想象成某种东西
a) 异步 b) 不可靠 c) 无法控制
所以,当你发送一些东西时,事情会在不可控的情况下并行发生。当您向远程计算机发送某些内容时,甚至不能保证数据(初始数据和数据 - 请参阅 TCP)通过相同的路径传输。
TCP 可以很好地管理单个连接的顺序传输,但不能很好地管理两个连接的顺序传输。如果您使用/需要两个相同的服务器/端口,您通常会这样做,因为您希望它们是独立的。您正在使用 Java 进行编程,尝试在单个 tcp-socket-connection 上同步/调度以保证交付顺序,并使用多个并行运行。
关于java套接字编程: message delivery order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13073603/