1
4
TCP是一种流协议,而不是像UDP那样的数据报协议这意味着从tcp的角度来看,数据包是不相关的。它们只是暂时存在于电线上。 应用程序发送的任何数据都将放入连续发送缓冲区,然后由操作系统打包以便传输这意味着应用程序的多次写入可能导致一个数据包、一次写入多个数据包等。如果数据在传输过程中丢失(即没有ACK),发送方OS甚至可以使用不同大小的数据包进行重新传输。 在线路上接收到的类似数据包将重新组装到操作系统内核中,并放入连续读取缓冲区所有可能存在于线缆上的包边界将在这样做时丢失。因此,应用程序无法发现分组边界在何处。
|
2
0
更新:无法使用net.conn完成
事实上,是的
不
可以“偷看”一个
见 可行半溶液理想的解决方案是在第一次尝试时能够立即偷看在四处搜索时,我发现了一些自定义的go-TCP库但我还没有足够的冒险精神去尝试。
根据@steffenullrich所说,事实证明
我想我之前试过这个,看到缓冲区只有1个字节,但是读了上面的答案,我创建了一个特定的测试用例来确定,并且它工作了。 缺点
这仍然需要
这意味着,对于我的特定情况,在支持单个协议(需要服务器发送第一个hello数据包)的情况下,我必须将有关连接的状态存储在其他地方,以便在没有收到任何数据的情况下,如果经过足够的时间(比如说250毫秒),我知道现在可以跳过第一个数据包进入时的检测。 |
Levent Dag · 发送和接收不一致 6 年前 |
Deepesh Meena · 使用tcp将文件从服务器发送到客户端 6 年前 |
Mrmeguyme · Java TCP连接套接字未写入输出流 6 年前 |
mac01021 · AWS Lambda功能停止连接? 6 年前 |
Tadas · ESP32 TCP客户端 6 年前 |
slim71 · C-通过套接字向客户端发送UDP消息 6 年前 |
Pareidolia · 序列号和确认号不匹配 6 年前 |
schubi · 将jpeg字符数据转换为opencv mat 6 年前 |