TCP发送图像,到达后重新组装
本文关键字:新组装 图像 TCP | 更新日期: 2023-09-27 18:25:10
好的,我目前一直在使用UDP(喜欢它),但我遇到了瓶颈,因为不可能发送大量内容。根据我的理解,不可能分割和重新组装(好吧,我可以重新组装,但零件将是同步的)。
如果有办法在UDP中做到这一点,我会全力以赴。
但如果没有,我将需要尝试TCP。
我想知道,我该怎么做?
目前在UDP中,它非常简单:
udpcap1.Send(u1,u1.Length,adress.Address.ToString(),1701);
byte[]databyte2=udpcap1.接收(ref地址)
差不多就是这样了(除了我必须设置它才能监听任何IP和端口)。
但在TCP中,它似乎并不那么容易,我不知道如何做到这一点,四处玩耍也没有给我带来任何好处,搜索也没有,因为我不太理解它
我更喜欢只使用客户端,这意味着没有套接字来做这项工作。只有客户端发送,客户端接收。
你能给我一些关于如何在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;
}
}
已解决,因为我更了解TCP的工作原理。
正如EJP所说,只是流。
TCP就像流一样工作,对于只使用过UDP的我来说,我不知道如何做到这一点。UDP发送包,所以我可以说,这个包包含那个,然后就发送它。
在TCP中,我可以在一个流中写入100个包,但我不在乎包,我只是向流中写入我想要的内容。TCP将处理包的大小和顺序。
因此,这个问题得到了解决:)