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

时间:2012-03-23 12:35:28

标签: 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(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.");
    }

修改: 我正在做一个大的应用..图像接收正常..然后我对代码做了一些更改,所以它很复杂,知道我究竟改变了什么...现在它不工作..所以我做了新的项目,并尝试了代码up ..仍然无法工作..我知道还有另外一种方法可以做到这一点..但我更喜欢这样做。 任何人都知道如何解决它?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

最有可能的是,您需要在发送数据后关闭套接字。

Image.FromStream()可能等到NetworkStream表示没有更多的字节需要处理,但是因为你在表单的级别上声明了Socket,所以它保持连接状态并且服务器等待更多数据。