TCP发送图像,到达时重新组合

时间:2013-07-26 06:11:14

标签: c# tcp

好的,我目前一直在使用UDP(喜欢它),但我遇到了瓶颈,因为不可能发送大量的东西。并且不可能将它分开并从我的理解中重新组合(我可以重新组装,但部分将是我们的同步)。

如果有办法在UDP中进行,我很满意。

但如果没有,我将需要尝试TCP。

我想知道,我该怎么做?

目前在UDP中非常简单:

udpcap1.Send(u1,u1.Length,adress.Address.ToString(),1701);

byte [] databyte2 = udpcap1.Receive(ref adress)

就是这样,(除了我必须将其设置为侦听任何IP和端口)。

但是在TCP中,它似乎并不那么容易,我不知道该怎么做,并且玩弄我无处可去,也没有搜索,因为我不太理解它。

我更喜欢使用客户端,这意味着没有Socket可以完成工作。 Just Client Send,Client Receive。

您能否就如何在TCP中发送和接收给我一些帮助?

以下是代码示例,但不起作用:

 private void Send()
     {
         if (tcpcap.Connected == false)
         {
             tcpcap.Connect("127.0.0.1", 1700);
         }   //tcpcap.Connect(adress);
         while (capcon == true)
         {
             Bitmap holder = new Bitmap(640, 480);
             Graphics graphics = Graphics.FromImage(holder);
             graphics.CopyFromScreen(0, 0, 0, 0, new Size(1920, 1200), CopyPixelOperation.SourceCopy); 
             byte[] u = imageToByteArray(holder);               
            tcpcap.Client.Send(u, u.Length, SocketFlags.None);
         }


  private void Listen()
    {
        while (checkBox1.Checked)
        {
            TcpClient client = this.tcplisten.AcceptTcpClient();
            tcplisten.AcceptTcpClient();
            if (tcplisten.Server.Connected)
            {
            byte[] b = new byte[tcplisten.Server.ReceiveBufferSize];
            tcplisten.Server.Receive(b);
            MemoryStream ms = new MemoryStream(b);
            Image receivedImag = Image.FromStream(ms);
                pictureBox1.BackgroundImage = receivedImag;
            }               
 }

1 个答案:

答案 0 :(得分:0)

解决了,因为我知道TCP的工作原理。

正如EJP所说,只是流。

TCP的工作方式就像一个流,而对于那些只使用过UDP的人来说,我还没有得到如何做到这一点。 UDP发送包,所以我可以说,这个包包含它,只是发送它。

在TCP中,我可以在流中编写100个包,但我不关心包,我只是写了我想要的内容,TCP将处理包的大小和顺序。

所以这解决了:)