【发布时间】:2011-10-07 09:52:45
【问题描述】:
我有一个TCP连接,客户端是PHP,服务器是C#
此套接字连接将 图像 传输到 socket 服务器,但是
随机有时传输会损坏[图片 hash 不同]
PHP 客户端
$file = file_get_contents('img.bmp');
socket_write($socket,$file.$cordinates); it sends //image + sme other data
$recv = socket_read ($socket, 500, PHP_BINARY_READ) // read the server response
这个流总是传输一个位图图像+一些数据。
C#
this.DataSocket = this.Listner.Accept();
int filelength = this.DataSocket.Receive(this.buffer, this.buffer.Length, SocketFlags.None)
我在 新鲜浏览器 [新打开的] 中进行了调查,这从未失败。但是当我在同一个浏览器中使用这个创建的服务多次时,这会失败。
当我使用不同的浏览器或浏览器的新实例进行检查时,从未在前几个中失败尝试。
我认为caching 有问题,但我使用headers 禁用caching,但存在同样的问题
【问题讨论】:
-
C# 与此有什么关系?还是不是? (我想知道问题是否在于 C# 中的流读取代码;人们经常会弄错)
-
失败图像的大小是否超过 500 字节?您使用的是 TCP 还是 UDP?如果您使用 UDP,则可能是因为网络拥塞仅在几次请求后才出现 - 并且因为 HTTP 即 TCP 在与 UDP 相同的线路上造成 UDP 数据包丢失。您是否考虑过在您的 C# 应用程序中使用 HttpListener 来简化此操作?
-
@Jonathan Dickinson 实际上我使用的样本数据超过了
500Bytes,我不明白HttpListener的任何例子吗? -
这就是原因,您只收到前 500 个字节。至于HttpListener,请看the documentation。这样您就可以使用 PHP HTTP 方法来获取文件。另外,我给你的链接是 Google 上的第一个结果。