當我使用sendto()發送消息時,出現錯誤「消息太長」?在C#中Socket通信中的消息太長錯誤#
Socket tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
如何找到我可以發送的最大可能尺寸?我可以改變它嗎?這裏有什麼可能的問題?
當我使用sendto()發送消息時,出現錯誤「消息太長」?在C#中Socket通信中的消息太長錯誤#
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手冊頁的插座(),你應該能夠使用的sysctl(2)或的/ proc/SYS /網/核心/ *文件。 我覺得特別,你可以使用以下命令:
rmem_default
包含在插座的字節的默認設置接收緩衝區。
rmem_max
包含用戶可以使用SO_RCVBUF套接字選項設置的最大套接字接收緩衝區大小(以字節爲單位)。
或者連接的TCP套接字,並使用'Send'。 – 2010-06-23 02:47:50
我正在使用連接,然後sendto。我也嘗試使用Stream.write()。但是我仍然得到同樣的錯誤。我必須使用TCP套接字並且不能使用UDP。另外我的消息大小几乎是30個字節。 – Sam 2010-06-23 17:26:29
我用一個使用TcpClient的例子更新了答案。 – 2010-06-23 19:01:14