【发布时间】:2013-09-01 22:47:50
【问题描述】:
我在 .NET 中使用 udp 套接字;特别是我制作了一个程序,通过 udp 套接字将图像从图片框发送到其他程序。
这是代码:
这是套接字从端口 8000 接收图像的侦听器部分
private void Listening()
{
IPEndPoint ipep = new IPEndPoint(IPAddress.Loopback, 8000);
Socket newsock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
newsock.Bind(ipep);
int recv;
IPEndPoint sender1 = new IPEndPoint(IPAddress.Parse("192.168.1.1"), 6000);
EndPoint Remote = (EndPoint)sender1;
byte[] data = new byte[11230];
recv = newsock.ReceiveFrom(data,ref Remote);
MemoryStream x = new MemoryStream(data);
Image y = Image.FromStream(x);
pictureBox2.Image = y;
}
这是socket发送图片的发送部分 [代码]
private void Sending()
{
IPAddress host = IPAddress.Parse("127.0.0.1");
IPEndPoint hostep = new IPEndPoint(host, 8000);
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
sock.Connect(hostep);
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
sock.Send(ms.ToArray());
}
两部分都在同一台电脑上。
我的问题是,当它在“发送”部分中调用“发送”函数时,它会生成以下消息的异常:
“在数据报套接字上发送的消息的大小大于内部消息缓冲区或其他网络限制,或者数据报的接收缓冲区的大小小于数据报本身的大小”
感谢您的宝贵时间
【问题讨论】:
-
不要使用 UDP。严重地。除非你真的知道你需要 UDP,否则不要使用它。
-
错误信息非常明确:您尝试发送的数据量对于 UDP 来说太大。除此之外,您的代码中还有很多问题,所以 +1 @JonathonReinhart 所说的。
-
@dtb 除了选择 UDP 而不是 TCP,有什么错误?