套接字->程序导致缺少最后一个字符
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,停止了截断。
目的
对于此程序,目的是让 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,停止了截断。