我的程序实现了 http 客户端(通过从 TCPClient 继承),它将请求发送到 http 服务器以获得块传输编码流(换句话说,通过 HTTP 的视频流)。
为了监控客户端和服务器之间的连接,我启动了后台线程,试图将空字节(0x00)写入同一个套接字并相应地发现连接问题(如此处推荐):
while (Client != null && Client.Send(ping) > 0)
Thread.Sleep(2000);
从两个线程写入的影响是,在 Wire-shark 中,有时我会在同一个数据包中看到 ping 和 HTTP 请求,如下所示:
00 10 18 8d 23 ab 00 11 5d b9 e8 00 08 00 45 00 ....#...].....E.
00 b1 38 21 40 00 3e 06 77 de 0a 3f 03 3d 0a 3f ..8!@.>.w..?.=.?
74 8d 89 7f 00 50 6b c3 45 a8 9f 76 4a 88 80 18 t....Pk.E..vJ...
13 5d a9 ad 00 00 01 01 08 0a 9c ea b6 a5 00 06 .]..............
9f 8b 47 45 54 20 2f 73 74 72 65 61 6d 2f 31 2f ..GET /stream/1/
45 76 65 6e 74 41 20 48 54 54 50 2f 31 2e 31 0d EventA HTTP/1.1.
当然服务器会忽略这个数据包并且看不到http请求。
有什么方法可以写入套接字并使用 Send 方法并确保它将在一个数据包中发送?
[编辑]
正如我从大卫和 TAS 的回答中所理解的那样——这是不可能的。这甚至不是 TCP 的运作方式。