gpt4 book ai didi

java - 从 java ServerSocket 到 iphone 的网络问题(仅在 3g 模式下)

转载 作者:行者123 更新时间:2023-11-30 11:53:56 26 4
gpt4 key购买 nike

我遇到了奇怪的行为:

我有一个基于 java ServerSocket 的服务器,它服务于从 iPhone 设备发送的 TCP 请求。我注意到当我使用 iPhone 通过 wi-fi 连接时,网络没有问题。 iphone 打开一个连接,而不是像它应该的那样从流中写入和读取,没有明显的延迟。到目前为止,一切都很好。但是,使用 3g,从发送第一条消息到响应完全返回,我遇到了 1.5 秒的延迟。似乎消息的第一个字节是在服务器将消息刷新到套接字之后立即读取的,但是消息的其余部分被延迟了大约一秒钟(!)。

我通过在 iPhone 端打印缓冲区大小和在服务器端使用 wireshark 监控网络来验证此网络行为。Wireshark 也显示了这一点 - 第一个字节以 1 字节的消息大小发送(顺便说一句,它始终为 0),然后消息的其余部分在一个或多个大消息中发送( ~1300 字节)。

消息由一个 8 字节的 header (2 个整数 - 类型和大小)和该大小的正文组成。

真正奇怪的是,在 c++ 中使用相同协议(protocol)编写类似的服务器(使用 poco 服务器),却运行良好。

我使用套接字的 DataOutputStream 使用 2 个 writeInt 指令和一个写入正文的 write(byte[]) 来写入 header 。然后我冲洗流。

有谁知道是否有一个套接字选项(在 Java 中)会导致这种行为?

任何帮助将不胜感激。

最佳答案

我通过用 BufferedOutputStream 包装套接字输出流解决了这个问题:

DataOutputStream dos = new DataOutputStream(new BufferedOutputstream(sock.getOutputStrean()));

谢谢,里尔

关于java - 从 java ServerSocket 到 iphone 的网络问题(仅在 3g 模式下),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6004690/

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