簡體   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