我在使用套接字通过网络发送以下140kb图像文件时遇到问题:
文件的开头已正确传输,然后其余部分困惑,从而导致以下结果:
我有一台服务器,等待文件,还有一个客户端连接到服务器并启动文件传输。当客户端关闭连接时,服务器知道文件已发送完毕并保存。
在写入文件之前,服务器端的所有数据都收集在字节列表(GLOBAL.FILE_BUFFER)中:
public void OnDataReceived(IAsyncResult asyn)
{
try
{
SocketPacket socketData = (SocketPacket)asyn.AsyncState;
int iRx = socketData.m_currentSocket.EndReceive(asyn);
for (int f = 0; f < iRx; f++)
{
GLOBAL.FILE_BUFFER.Add(socketData.dataBuffer[f]); // Collect all the incoming data into a buffer
}
WaitForData(socketData.m_currentSocket, socketData.socket_id, REQUEST_INDEX_ID);
}
catch (ObjectDisposedException)
{
}
catch (SocketException se)
{
}
}
这是我用来写入文件的代码:
public static void ByteArrayToFile(string _FileName, byte[] _ByteArray, int BytesRead)
{
System.IO.FileStream _FileStream = new System.IO.FileStream(_FileName, System.IO.FileMode.Create, System.IO.FileAccess.Write);
_FileStream.Write(_ByteArray, 0, BytesRead);
_FileStream.Close();
}
我在科学方面使用了相同的ByteArrayToFile函数,它可以正确保存图像。看来客户端正在发送正确的数据,但是当服务器接收到数据时,它就会变得困惑。我在两端分别按客户端和服务器保存了文件,然后对它们进行了比较:
注意底部中心的紫色线/条。它指示那里的数据不匹配,但请注意在开始时数据完全匹配。
我不明白这是怎么回事,因为我正在使用列表,并一直添加到字节列表中,直到没有剩余的内容可供阅读!!如果您没有解决方案,可以给我任何提示吗?这个问题困扰了我好几个星期,希望最终解决这个问题。谢谢!
最佳答案
您可以从数据比较中看出问题出在哪里吗?服务器是只是丢弃字节还是数据已损坏?正确传输了多少数据?
考虑使用像Wireshark这样的东西来检查字节,因为它们不存在。那应该可以帮助您确定是网络错误还是服务器代码中的错误。
关于c# - 使用套接字通过网络发送图像,数据困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9590308/