当我使用sendto()发送消息时,我收到错误“消息太长”?
Socket tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
如何找出可以发送的最大尺寸?我可以改变吗?这可能有什么问题?
答案 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套接字选项设置的最大套接字接收缓冲区大小(以字节为单位)。