0

好的,我目前一直在使用 UDP(喜欢它),但我遇到了瓶颈,因为无法发送大量内容。根据我的理解,不可能将它分开并重新组装(我可以重新组装,但零件将是我们同步的)。

如果有办法在 UDP 中做到这一点,我很乐意。

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

我想知道,我该怎么做?

目前在 UDP 中它非常简单:

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

byte[] databyte2 = udpcap1.Receive(参考地址)

差不多就是这样,(除了我必须设置它来监听任何 IP 和端口)。

但是在 TCP 中,这似乎并不那么容易,我不知道该怎么做,而且到处乱跑让我无处可去,搜索也没有,因为我不太明白。

我更喜欢只使用客户端,这意味着没有 Socket 来完成这项工作。只是客户端发送,客户端接收。

你能给我一些关于如何在 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;
            }               
 }
4

1 回答 1

0

解决了,据我所知,更多地了解 TCP 的工作原理。

正如 EJP 所说,只是流式传输。

TCP 像流一样工作,对于只使用过 UDP 的我来说,我不知道该怎么做。UDP发送包,所以我可以说,这个包包含那个,然后发送它。

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

这样就解决了:)

于 2013-08-09T04:52:44.980 回答