繁体   English   中英

Networkstream没有响应

[英]Networkstream not responding

我正在尝试通过网络流发送图像,这是我的客户端代码:

   private void Form1_Load(object sender, EventArgs e)
    {

        TcpClient client=new TcpClient();
        client.Connect("127.0.0.1", 10);
       NetworkStream  ns = client.GetStream();
        Bitmap screen = GetDesktopImage();//generate a screenshot.
        MemoryStream ms = new MemoryStream();
        screen.Save(ms, ImageFormat.Png);

        byte[] byteCount = BitConverter.GetBytes((int)ms.Length);

        ms.Position = 0;
       ns.Write(byteCount, 0, byteCount.Length);
        ms.CopyTo(ns);
        ms.SetLength(0);



    }

这是服务器:

    private void Start()
    {
        TcpListener listen = new TcpListener(IPAddress.Any, 10);
        listen.Start();

        NetworkStream ns = new NetworkStream(listen.AcceptTcpClient().Client);
        byte[] temp = new byte[4];
        ns.Read(temp, 0, 4);
        int count = BitConverter.ToInt32(temp, 0);   
        byte[] buff = new byte[count];
        pictureBox1.Image = Image.FromStream(ns);

    }


    private void Form1_Load(object sender, EventArgs e)
    {
        Thread th = new Thread(Start);
        th.Start();

    }

我在图片框上看不到任何内容,我猜程序在这里挂起了pictureBox1.Image = Image.FromStream(ns); 刚刚在此处添加了一个断点,但它不起作用。 **只有当我关闭客户端程序并停止调试时,我才能在服务器端的图片框上看到图像。 为什么会这样?有什么想法吗?

我的猜测是Image.FromStream在绘制完整图像时不知道要停止读取。 也许PNG格式甚至不允许这样做。 您需要为Image.FromStream提供大小有限的流。 最简单的方法是使用BinaryReader.ReadBytes(count)读取所需的确切字节数。

ns.Read(temp, 0, 4); :这是一个错误,因为它假定读取将恰好返回4个字节。 情况可能并非如此。 再次使用BinaryReader.ReadInt32安全地读取一个int。

更好的是,放弃自定义序列化格式,并使用诸如protobuf length前缀的名称。 或者,HTTP或WCF。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM