【发布时间】:2015-08-16 09:00:49
【问题描述】:
我正在尝试通过网络流发送图像,这是我的客户端代码:
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);刚刚在那里添加了一个断点,但它不起作用。
**只有当我关闭客户端程序并停止调试时,我才能在服务器端的图片框中看到图像。
为什么会这样?有什么想法吗?
【问题讨论】:
-
pictureBox1.Image = Image.FromStream(ns);只是在那里添加了一个断点,但它不起作用 - 这是否意味着它永远不会到达断点,或者没有过去了吗?
-
它只是没有超过它。在它起作用之前。 @Amit
-
您是否尝试将字节抓取到
buff? -
@Amit yep.still 没有运气
-
因此,如果您在分配数组后立即尝试读取流 (
ns) 的“计数”字节,那么在客户端关闭之前,对ns.Read(buff, 0, count)的调用不会返回?这很奇怪……
标签: c# networking stream