2012-04-25 91 views
0

我有一個簡單的UDP服務器和客戶端。客戶端創建一個DGRAM套接字,將其綁定(顯式地)(即使不需要),使用getsockname()(非零)打印出綁定的端口,然後發送一條消息(通過sendto( )),這是成功交付。recvfrom()返回發件人端口爲0(零)

服務器使用recvfrom()接收消息。郵件正確接收,但發件人的端口號爲零收到的第一條消息(我正在使用ntohs())。從第二條消息中,端口號顯示正確(即與客戶端顯示其套接字綁定的端口號相同)。

有什麼想法?

更新:問題解決了我。見下面的答案。

+0

你在哪個平臺上運行這個平臺? – Sniggerfardimungus 2012-04-25 18:47:21

+0

解決了這個問題。問題已更新。 – 2012-04-25 18:53:19

回答

2

我解決了這個問題。假設recvfrom()的最後一個參數是

socklen_t from_len;
,那麼在recvfrom()調用之前,您必須設置
from_len = sizeof(struct sockaddr_in);
(用於IPv4)。微不足道,我知道它,但有時它可以跳過你的想法:-)