2012-03-23 98 views
0

我有问题,在TCP套接字接收图像[.NET 4.0]无法通过TCP套接字接收图像?

服务器:

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."); 
    } 

编辑: IM做一个大的应用程序。 。image正在收到很好..然后我做了一些代码的变化,所以它变得很复杂,知道我究竟是什么改变..现在它不工作..所以我做了新的项目D尝试了代码..仍然无法正常工作..我知道还有其他方法可以做到这一点..但我更喜欢这样做。 任何人都知道如何解决它?

+0

也许你开始,通过描述你的问题到底在哪里...... – Carsten 2012-03-23 12:44:35

+0

@CarstenKönig在服务器代码中的评论..服务器没有收到它在pictureBox线阻止..你能读它吗! – 2012-03-23 12:47:04

+0

服务器pictureBox1控件或类是否明白它期待一个png格式的字节流?它可能没有完成,因为可能有png格式的元数据表示图像的大小,如果接收端不知道这一点,它将不知道它何时接收到所有数据? – 2012-03-23 14:52:08

回答

0

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

Image.FromStream()可能等到NetworkStream表示没有更多的字节来处理,但因为你的窗体类级别声明的Socket,它保持连接和更多数据服务器等待。

+0

最后..这就是为什么它停止工作后,我修改我的代码..!但我需要那个连接..有反正它还活着吗? – 2012-03-23 15:39:10

+0

你可以保持它活着 - 但是然后你需要一些机制告诉服务器第一个图像被发送,并且下一个接收到的字节属于一个新的。这意味着您必须发送额外的数据(例如,首先发送图像大小,然后发送图像数据),并且在服务器端需要解析和分割数据。 – 2012-03-23 15:43:10

1

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