java套接字编程: message delivery order

标签 java sockets network-programming

我对任何类型的网络编程都是新手。请您回答以下问题。

我正在使用 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/

相关文章:

java - 有没有比 findViewById() 更好的方法将 XML 元素与 Android 中的 java 类链接起来

java - 如何使用 Axis WSDL2Java 生成的文件?

python - 如何在python中为套接字设置发送缓冲区大小

linux - BSD 套接字头

java - eclipse java资源泄漏

c - 访问套接字的文件描述符

windows - 有没有办法在 Windows 热点上实现强制门户?

iOS 支持 DNS over TLS : native config possible, 第三方可用,还是尚未实现?

network-programming - 使用inetd 还是不使用inetd...我什么时候应该将inetd 用于我的网络服务器程序?

java - 如何在 IntelliJ 中为 JaxB Java 文件生成 XSD