C#中的套接字通信中的消息太长错误

时间:2010-06-23 02:14:53

标签: c# sockets

当我使用sendto()发送消息时,我收到错误“消息太长”?

 Socket tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

如何找出可以发送的最大尺寸?我可以改变吗?这可能有什么问题?

2 个答案:

答案 0 :(得分:1)

首先,SendTo仅用于UDP套接字。在上面的代码片段中,您将打开一个TCP套接字。 SendTo不适用于TCP套接字。尝试使用UDP套接字,看看它是否有效。请记住,UDP数据包的最大实际大小为65,507字节。通常,您希望保持UDP数据包较小,以避免与其传输相关的各种网络元素碎片化。

修改

使用TcpClient让您的生活更轻松。

Int32  port = 13293;
String host = "somehost.com";
TcpClient tcpClient = new TcpClient(host, port);

Byte[] data = System.Text.Encoding.ASCII.GetBytes("your message to send");

NetworkStream stream = tcpClient.GetStream();

stream.Write(data, 0, data.Length);

答案 1 :(得分:0)

从socket()的Linux手册页中,您应该能够使用sysctls(2)或/ proc / sys / net / core / *文件。 我认为你可以使用以下内容:

<强> rmem_default
包含套接字接收缓冲区的默认设置(以字节为单位) 的 rmem_max
包含用户可以使用SO_RCVBUF套接字选项设置的最大套接字接收缓冲区大小(以字节为单位)。

  • 使用第一个检查接收缓冲区的默认大小。
  • 查看第二个确定最大大小并确保您发送的数据包的大小小于该值。
  • 使用SO_RCVBUF套接字选项更改接收缓冲区的大小。