C# ArgumentException Image.FromStream 在套接字上进行多次发送

怪胎

我有一个小客户端/服务器,它通过 TCP 通过套接字发送数据。这是发件人:

static void Main(string[] args)
        {
            byte[] data = new byte[1024];
            int sent;
            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);

            Socket server = new Socket(AddressFamily.InterNetwork,
                            SocketType.Stream, ProtocolType.Tcp);

            try
            {
                server.Connect(ipep);
            }
            catch (SocketException e)
            {
                Console.WriteLine("Unable to connect to server.");
                Console.WriteLine(e.ToString());
                Console.ReadLine();
            }


            for (int i = 0; i < 212; i++) {
            Bitmap bmp = new Bitmap("C:/Users/ITFreak/source/repos/CamStream/CamStream/bin/x86/Debug/images/image" + Convert.ToString(i) + ".bmp");

            MemoryStream ms = new MemoryStream();
            bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);

            byte[] bmpBytes = ms.ToArray();
            bmp.Dispose();
            ms.Close();

            sent = SendVarData(server, bmpBytes);
            Console.WriteLine("Sent " + sent + " bytes");

        }

            Console.WriteLine("Disconnecting from server...");
            server.Shutdown(SocketShutdown.Both);
            server.Close();
            Console.ReadLine();
        }

        private static int SendVarData(Socket s, byte[] data)
        {
            int total = 0;
            int size = data.Length;
            int dataleft = size;
            int sent;

            byte[] datasize = new byte[4];
            datasize = BitConverter.GetBytes(size);
            sent = s.Send(datasize);

            while (total < size)
            {
                sent = s.Send(data, total, dataleft, SocketFlags.None);
                total += sent;
                dataleft -= sent;
            }
            return total;
        }
    }

和接收器:

private static void startListening()
        {

            Console.WriteLine("Server is starting...");
            byte[] data = new byte[1024];
            IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);

            Socket newsock = new Socket(AddressFamily.InterNetwork,
                            SocketType.Stream, ProtocolType.Tcp);

            newsock.Bind(ipep);
            newsock.Listen(10);
            Console.WriteLine("Waiting for a client...");

            Socket client = newsock.Accept();
            IPEndPoint newclient = (IPEndPoint)client.RemoteEndPoint;
            Console.WriteLine("Connected with {0} at port {1}",
                            newclient.Address, newclient.Port);

            while (true)
            {
                int i = 0;
                data = ReceiveVarData(client);
                MemoryStream ms = new MemoryStream(data);
                try
                {
                    Image bmp = Image.FromStream(ms);
                    Image img2 = new Bitmap(bmp);
                    img2.Save("./images/image " + Convert.ToString(i)  + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
                    Console.WriteLine("Saved image #" + Convert.ToString(i));
                    i++;
                }
                catch (ArgumentException e)
                {
                    //Console.WriteLine("something broke");
                }


                if (data.Length == 0)
                    newsock.Listen(10);
            }
            //Console.WriteLine("Disconnected from {0}", newclient.Address);
            client.Close();
            newsock.Close();
        }

        private static byte[] ReceiveVarData(Socket s)
        {
            int total = 0;
            int recv;
            byte[] datasize = new byte[4];

            recv = s.Receive(datasize, 0, 4, 0);
            int size = BitConverter.ToInt32(datasize, 0);
            int dataleft = size;
            byte[] data = new byte[size];


            while (total < size)
            {
                recv = s.Receive(data, total, dataleft, 0);
                if (recv == 0)
                {
                    break;
                }
                total += recv;
                dataleft -= recv;
            }
            return data;
        }

如果我只想传输一张图像,该代码工作正常,但Image.FromStream如果我想传输所有数据则会出现 ArgumentException 失败

我可以发现i在客户端永远不会增加,它总是 0。

有人看到我的错误了吗,为什么没有相应地保存多个图像/为什么我的客户端的流损坏了?

yv989c

在您的startListening方法中,您iwhile循环内部声明,而在外部执行:

int i = 0;

while (true)
{
    data = ReceiveVarData(client);
    ...
}

否则,i在每次循环迭代时将 的值设置回 0。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C#中使用image.fromstream时参数无效

来自分类Dev

Image.FromFile()或FromStream()挂在GdiplusStartup上

来自分类Dev

使用Image.FromStream返回图像

来自分类Dev

尝试/捕获Image.FromStream()而不捕获其余using语句?

来自分类Dev

Picturebox.Image.Dispose导致ArgumentException?

来自分类Dev

System.Drawing.Image Save 的输出与输入 Image.FromStream 的不同

来自分类Dev

并行的C#List.AddRange.For发生ArgumentException

来自分类Dev

C套接字:recv并同时发送

来自分类Dev

C#System.ArgumentException:目标数组不够长

来自分类Dev

UWP C#/ XAML:System.ArgumentException(超出预期范围)

来自分类Dev

C#打开虚拟串行端口会引发ArgumentException

来自分类Dev

C#System.ArgumentException:目标数组不够长

来自分类Dev

如何在 C# 中修复“System.ArgumentException”?

来自分类Dev

如何使用套接字C / C ++批量发送文件?

来自分类Dev

在套接字C / C ++上发送浮点值

来自分类Dev

System.Drawing.GDIPlus.CheckStatus System.Drawing.Image.FromFile System.ArgumentException [GDI +状态:InvalidParameter]

来自分类Dev

BluetoothLEAdvertisementDataSection(ArgumentException)

来自分类Dev

FileSystemWatcher ArgumentException

来自分类Dev

FileSystemWatcher ArgumentException

来自分类Dev

c-套接字,为什么ip以整数格式发送?

来自分类Dev

通过C中的TCP套接字发送结构

来自分类Dev

C套接字客户端发送换行符

来自分类Dev

如何在C#中通过套接字发送文件

来自分类Dev

C套接字,文件后发送消息,TCP

来自分类Dev

在C中发送和接收结构-套接字编程

来自分类Dev

通过C中的套接字发送空终止符

来自分类Dev

C套接字客户端发送换行符

来自分类Dev

C ++套接字,发送和接收不同步

来自分类Dev

在C#中使用.net UDP套接字发送字节

Related 相关文章

  1. 1

    在C#中使用image.fromstream时参数无效

  2. 2

    Image.FromFile()或FromStream()挂在GdiplusStartup上

  3. 3

    使用Image.FromStream返回图像

  4. 4

    尝试/捕获Image.FromStream()而不捕获其余using语句?

  5. 5

    Picturebox.Image.Dispose导致ArgumentException?

  6. 6

    System.Drawing.Image Save 的输出与输入 Image.FromStream 的不同

  7. 7

    并行的C#List.AddRange.For发生ArgumentException

  8. 8

    C套接字:recv并同时发送

  9. 9

    C#System.ArgumentException:目标数组不够长

  10. 10

    UWP C#/ XAML:System.ArgumentException(超出预期范围)

  11. 11

    C#打开虚拟串行端口会引发ArgumentException

  12. 12

    C#System.ArgumentException:目标数组不够长

  13. 13

    如何在 C# 中修复“System.ArgumentException”?

  14. 14

    如何使用套接字C / C ++批量发送文件?

  15. 15

    在套接字C / C ++上发送浮点值

  16. 16

    System.Drawing.GDIPlus.CheckStatus System.Drawing.Image.FromFile System.ArgumentException [GDI +状态:InvalidParameter]

  17. 17

    BluetoothLEAdvertisementDataSection(ArgumentException)

  18. 18

    FileSystemWatcher ArgumentException

  19. 19

    FileSystemWatcher ArgumentException

  20. 20

    c-套接字,为什么ip以整数格式发送?

  21. 21

    通过C中的TCP套接字发送结构

  22. 22

    C套接字客户端发送换行符

  23. 23

    如何在C#中通过套接字发送文件

  24. 24

    C套接字,文件后发送消息,TCP

  25. 25

    在C中发送和接收结构-套接字编程

  26. 26

    通过C中的套接字发送空终止符

  27. 27

    C套接字客户端发送换行符

  28. 28

    C ++套接字,发送和接收不同步

  29. 29

    在C#中使用.net UDP套接字发送字节

热门标签

归档