Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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# 无法通过TCP套接字接收图像?_C#_Image_Tcp_Client Server_Networkstream - Fatal编程技术网

C# 无法通过TCP套接字接收图像?

C# 无法通过TCP套接字接收图像?,c#,image,tcp,client-server,networkstream,C#,Image,Tcp,Client Server,Networkstream,我在通过TCP套接字[.net 4.0]接收图像时遇到问题 服务器: Socket s = null; Socket client; private void button1_Click(object sender, EventArgs e) { s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); s.Bind(new IPEndPoint(IPA

我在通过TCP套接字[.net 4.0]接收图像时遇到问题

服务器:

Socket s = null;
Socket client;
private void button1_Click(object sender, EventArgs e)
    {
        s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        s.Bind(new IPEndPoint(IPAddress.Any, 9988));
        s.Listen(1);
        client = s.Accept();

        pictureBox1.Image = Image.FromStream(new NetworkStream(client));
        //Server freezes here and waiting for the image .. but in the Client side.. it tells that it sent.

        Console.WriteLine("Received.");
    }
客户:

Socket s = null;
private void button1_Click(object sender, EventArgs e)
    {
        s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        s.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9988));
        Rectangle bounds = Screen.GetBounds(Point.Empty);
        Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);
        Graphics g = Graphics.FromImage(bitmap);
        g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
        bitmap.Save(new NetworkStream(s), ImageFormat.Png);
        Console.WriteLine("sent.");
    }
编辑: 我正在申请一个大申请。。图像接收得很好。。然后我对代码做了一些更改,所以很难知道我到底更改了什么。。现在它不起作用了。。所以我做了新的项目并尝试了代码。。还是不行。。我知道还有其他的方法。。但我更喜欢这样做。
任何人都知道如何修复它???

很可能在发送数据后需要关闭套接字


Image.FromStream()
可能会等到
NetworkStream
指示没有更多字节要处理,但是由于您在窗体的类级别声明了
Socket
,它保持连接,服务器等待更多数据。

我认为您需要将图像转换为字节,然后获取字节的大小并将其发送到服务器,服务器准备缓冲区大小,然后客户端发送图像的字节,您可以找到如何做的视频

也许您可以开始,通过描述问题的具体位置…@CarstenKönig在服务器代码中的注释。。服务器没有收到它,在pictureBox行被阻止。。你能读懂吗!服务器pictureBox1控件或类是否理解它需要png格式的字节流?它可能没有完成,因为可能有指示图像大小的png格式的元数据,如果接收端不知道这一点,它将不知道何时收到所有数据?它看起来像image.FromStream会自动为您检测格式,所以这可能不是您的问题。@ShaneWalti是的工作..最后。。这就是为什么我修改代码后它停止工作的原因!!但我需要那种联系。。有没有办法让它保持活动状态?你可以让它保持活动状态,但是你需要某种机制来告诉服务器第一个映像已经发送,下一个接收到的字节属于一个新的字节。这意味着您必须发送额外的数据(例如,首先发送图像大小,然后发送图像数据),并且在服务器端您需要解析和拆分数据。