Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法通过UDP发送图像_C#_Image_Sockets_Udp_Send - Fatal编程技术网

C# 无法通过UDP发送图像

C# 无法通过UDP发送图像,c#,image,sockets,udp,send,C#,Image,Sockets,Udp,Send,这将获取并发送屏幕截图: public void SendSS() { try { while (!mainFrm.ssStop) { memStream = new MemoryStream(halfBuffer); Rectangle totalSize = Rectangle.Em

这将获取并发送屏幕截图:

 public void SendSS() 
        {
            try
            {
                while (!mainFrm.ssStop)
                {
                    memStream = new MemoryStream(halfBuffer);
                    Rectangle totalSize = Rectangle.Empty;
                    Screen s = Screen.PrimaryScreen;
                    totalSize = Rectangle.Union(totalSize, s.Bounds);

                    Bitmap screenShotBMP = new Bitmap(totalSize.Width, totalSize.Height, PixelFormat.
                            Format32bppArgb);

                    Graphics screenShotGraphics = Graphics.FromImage(screenShotBMP);
                    screenShotGraphics.CopyFromScreen(totalSize.X, totalSize.Y, 0, 0, totalSize.Size,
                            CopyPixelOperation.SourceCopy);

                    screenShotBMP.Save(memStream, ImageFormat.Gif);

                    //Send data to contact over via port.                    
                    byte[] dataToWrite = memStream.ToArray();
                    ssUdpClient.Send(dataToWrite, dataToWrite.Length, mainFrm.contactIP, 1500);
                    screenShotBMP.Dispose();
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message, "frmVoiceChat-SendSS()", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
接收图像,然后在图片框中显示:

public void ReceiveSS() 
    {
        try
        {
            IPEndPoint remoteEPSS = new IPEndPoint(IPAddress.Any, 1500);

            while (!mainFrm.ssStop)
            {
                //Receive data.
                mainFrm.receiveSSByteData = ssUdpClient.Receive(ref remoteEPSS);

                //Decompress the data.                     

               byte[] byteDecodedData = new byte[mainFrm.receiveSSByteData.Length];
               byteDecodedData = mainFrm.receiveSSByteData;

                MemoryStream receivedMemStream = new MemoryStream(byteDecodedData);
                Image image = Image.FromStream(receivedMemStream);

                pbScreenShare.Image = image;
                pbScreenShare.BackgroundImage = image;

                //image.Dispose();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "frmVoiceChat-ReceiveSS()", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

我遇到的问题是数据报对于缓冲区来说太大,或者缓冲区对于数据报来说太小。如何使图像的字节足够小,能够通过套接字并在最后仍然显示为完整的图像?

压缩图像或使用TCP协议。UDP数据报有效负载限制在约65500字节。请重新设计系统以使用TCP。通过UDP发送大量数据是一个糟糕的主意,您的网络管理员可能会给您一个新的。如果您超过了限制,您不能简单地通过多个数据包来打破它,因为UDP不能保证传输顺序。