Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C中套接字通信中的消息太长错误#_C#_Sockets - Fatal编程技术网

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

C# C中套接字通信中的消息太长错误#,c#,sockets,C#,Sockets,当我使用sendto()发送消息时,会出现错误“消息太长” 我怎样才能找到我可以发送的最大可能大小?我能换一下吗?这里可能有什么问题 在socket()的Linux手册页中,您应该能够使用sysctls(2)或/proc/sys/net/core/*文件。 我认为,您尤其可以使用以下内容: rmem\U默认值 包含套接字接收缓冲区的默认设置(以字节为单位)。 rmem\u max 包含用户可以使用SO_RCVBUF套接字选项设置的最大套接字接收缓冲区大小(以字节为单位) 使用第一个选项检查接收

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


我怎样才能找到我可以发送的最大可能大小?我能换一下吗?这里可能有什么问题

在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);