1
2048個字節我不得不反覆調用函數來獲取所有數據,考慮到len參數設置爲10240。但是,這導致在過去的封鎖。我如何獲得所有數據並以平臺獨立的方式安全返回?recvfrom的()只獲得了從UDP套接字
順便說一句,我就使用netcat在發送側:
貓ocr_pi.png | nc -u服務器5555
這個問題是否與nc的行爲有關?我沒有找到任何設置UDP數據包大小的參數(-O代表TCP)。 謝謝。
2048個字節我不得不反覆調用函數來獲取所有數據,考慮到len參數設置爲10240。但是,這導致在過去的封鎖。我如何獲得所有數據並以平臺獨立的方式安全返回?recvfrom的()只獲得了從UDP套接字
順便說一句,我就使用netcat在發送側:
貓ocr_pi.png | nc -u服務器5555
這個問題是否與nc的行爲有關?我沒有找到任何設置UDP數據包大小的參數(-O代表TCP)。 謝謝。
UDP作爲消息發送和接收數據。在len
參數中,您告訴recvfrom()
您可以接收到的最大郵件大小,然後recvfrom()
將等待直到完整郵件到達,而不管其大小。 UDP消息是獨立的。與TCP不同,UDP消息不能部分發送/接收。這是一件全有或全無的事情。如果收到的消息的大小大於您指定的值len
,則該消息將被丟棄並且出現錯誤。
recvfrom()
塊的唯一方法是沒有可讀取的消息。如果您不希望阻止,使用select()
(或pselect()
或epoll
或其他平臺等值)到指定超時等待消息的到達,然後調用recvfrom()
只有當實際有東西可以讀。