套接字->程序导致缺少最后一个字符

Sockets->program causes missing last character

目的

对于此程序,目的是让 html 表单将上传的文件发送到服务器 运行 C# 侦听器。到目前为止,发送文件是有效的,它得到了处理,但是 运行 文件无法正常工作。

这已经缩小到似乎在文件末尾缺少一个字节。手动添加丢失的字节用于测试目的,但对于动态版本不实用。

结果

在一种文件类型中,它是一个错误的页脚,在另一种可接受的类型中似乎也是如此。

这是访问已发送数据的内容。

TcpListener tcp = new TcpListener(IPAddress.Any, port);
// then the stream...
int read = net.Read(buffer, 0, buffer.Length);
for (int i = 0; i < read ; i++)
bw.Write(buffer[i]);
socket_send($sock, $data, strlen($data), 1);

而发送数据的PHP结构化在create,connect,send,close。该文件由套接字的 POST、file_get_contents($file)filesize($file) 管理。

问题[更新]

Since the data is sent as a raw string, does the problem of the missing byte lie in the method of sending or receiving?

数据缺失的原因尚不清楚。它起源于使用PHP将刚刚上传的文件通过网络发送到另一个目的地。是什么导致数据丢失?

更新

尝试将 async begin/end 添加到读取数据的流中。虽然。缺少 char 可能是由于 PHP 套接字使用异常造成的。

移动通过 PHP 发送到服务器的上传文件解决了丢失 byte/char 的问题,尽管它没有准确回答为什么会丢失数据。

所以问题在于使用 PHP 套接字从服务器本身发送。

如果文件的大小大于您将文件读入的缓冲区的大小,那么文件没有完全下载也就不足为奇了——您只读取了一次输入流

问题出在 发送 数据的阶段,一旦 HTML 表单完成并将文件上传到服务器。

在 PHP 脚本的 socket_send 部分设置的标志出错了。

socket_send($sock, $data, strlen($data), 0);

将标志设置为 0,而不是 1,停止了截断。