繁体   English   中英

C#中的Socket通信中消息太长错误

[英]Message too long error in Socket communication in C#

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

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

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

首先, 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);

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM