C# C中套接字通信中的消息太长错误#
当我使用sendto()发送消息时,会出现错误“消息太长”C# C中套接字通信中的消息太长错误#,c#,sockets,C#,Sockets,当我使用sendto()发送消息时,会出现错误“消息太长” 我怎样才能找到我可以发送的最大可能大小?我能换一下吗?这里可能有什么问题 在socket()的Linux手册页中,您应该能够使用sysctls(2)或/proc/sys/net/core/*文件。 我认为,您尤其可以使用以下内容: rmem\U默认值 包含套接字接收缓冲区的默认设置(以字节为单位)。 rmem\u max 包含用户可以使用SO_RCVBUF套接字选项设置的最大套接字接收缓冲区大小(以字节为单位) 使用第一个选项检查接收
我怎样才能找到我可以发送的最大可能大小?我能换一下吗?这里可能有什么问题 在socket()的Linux手册页中,您应该能够使用sysctls(2)或/proc/sys/net/core/*文件。 我认为,您尤其可以使用以下内容: rmem\U默认值
包含套接字接收缓冲区的默认设置(以字节为单位)。
rmem\u max
包含用户可以使用SO_RCVBUF套接字选项设置的最大套接字接收缓冲区大小(以字节为单位)
- 使用第一个选项检查接收缓冲区的默认大小李>
- 查看第二个以确定最大大小,并确保您发送的数据包的大小小于该值
- 使用SO_RCVBUF套接字选项更改接收缓冲区的大小
SendTo
仅用于UDP套接字。在上面的代码片段中,您正在打开一个TCP套接字<代码>发送到无法与TCP套接字一起使用。使用UDP套接字尝试一下,看看是否有效。请记住,UDP数据包的最大实际大小为65507字节。通常,您希望保持UDP数据包较小,以避免其传输所涉及的各种网络元素造成碎片
编辑:
让你的生活更轻松
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);
或者连接TCP套接字并使用
Send
。我使用的是connect,然后是sendto。我还尝试使用Stream.write()。但我还是犯了同样的错误。我必须使用TCP套接字,不能使用UDP。此外,我的消息大小几乎不到30字节。
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);