c# - 使用套接字通过网络发送图像,数据困惑

标签 c# image sockets transfer

我在使用套接字通过网络发送以下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/

相关文章:

c# - Xamarin Forms IOS 打开 PDF

c++ - 为灰度图像着色

php - 从 Wordpress 中删除 WooCommerce 产品图片

使用 CygWin 进行 C 套接字编程

java - 使用套接字时替代扫描仪

c# - 接口(interface)继承问题

c# - Collection.Contains() 使用什么来检查现有对象?

html - 如何将图像粘贴到可滚动 div 的可见部分的底部

c++ - 用 C 编写 Linux 服务器的最佳方法(phtreads、select 或 fork?)

c# - SQL 批量复制截断十进制