我試圖通過Wi-Fi在MAC OS和iPod之間建立UDP通信,此時我可以從iPod發送數據包,並且我可以看到這些數據包有權MAC和IP地址(我使用wireshark監視網絡),但MAC只在wireshark打開時接收數據包,否則recvfrom()返回-1。在iPhone上收回UDP數據包
當我嘗試從MAC傳輸到iPhone我有相同的結果,我可以看到數據包發送,但iPhone似乎並沒有得到它們。
我用下面的代碼來發送:
struct addrinfo hints;
int rv;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_DGRAM;
if ((rv = getaddrinfo(IP, SERVERPORT, &hints, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}
// loop through all the results and make a socket
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
perror("talker: socket");
continue;
}
break;
}
if (p == NULL) {
fprintf(stderr, "talker: failed to bind socket\n");
return 2;
}
while (cond)
sntBytes += sendto(sockfd, message, strlen(message), 0, p->ai_addr, p->ai_addrlen);
return 0;
這個代碼,即可獲得:
struct addrinfo hints, *p;
int rv;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; // set
hints.ai_socktype = SOCK_DGRAM;
hints.ai_flags = AI_PASSIVE; // use to AF_INET to force IPv4 my IP
if ((rv = getaddrinfo(NULL, MYPORT, &hints, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}
// loop through all the results and bind to the first we can
for(p = servinfo; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
perror("listener: socket");
continue;
}
if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) {
close(sockfd);
perror("listener: bind");
continue;
}
break;
}
if (p == NULL) {
fprintf(stderr, "listener: failed to bind socket\n");
return 2;
}
addr_len = sizeof their_addr;
fcntl(sockfd, F_SETFL,O_NONBLOCK);
int rcvbuf_size = 128 * 1024; // That's 128Kb of buffer space.
setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF,
&rcvbuf_size, sizeof(rcvbuf_size));
printf("listener: waiting to recvfrom...\n");
while (cond)
rcvBytes = recvfrom(sockfd, buf, MAXBUFLEN-1 , 0, (struct sockaddr *)&their_addr, &addr_len);
return 0;
我缺少什麼?
請確保您的代碼已正確插入您的帖子中(使用您可以在發佈帖子時可以選擇的特殊代碼按鈕),現在沒有人可以閱讀它了^^「 – Bas 2010-04-28 14:42:57
雖然試圖將上述內容變爲好-formatted SO標記,我注意到最後一條if語句(「if(setsockopt(...」))格式不正確。它缺少至少一個「)」。 – 2010-04-28 15:11:22
你試圖發送多少個字節?你也試圖發送一個ASCII字符串或文件? – 2010-04-29 06:13:17