我们应该为Networking类编写一个简单的UDP客户端,下面的代码是我们的方法。我们非常密切地关注了几个例子,但客户并没有产生回应。我们有一台服务器记录其传入的消息,但没有来自我们客户端的消息显示。
我们已经尝试过几个小时调试这个,但无济于事。如果有人能指出我们正确的方向,我们真的很感激。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>
#define MAX 1024
int main(int argc, char* argv[]) {
int sockfd, actualSize;
char buf[MAX];
struct addrinfo hints, *res, *p;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_DGRAM;
if (getaddrinfo(argv[1], argv[2], &hints, &res) != 0){
fprintf(stderr, "getaddrinfo: failed\n");
return 1;
}
for (p = res; p != NULL; p = p->ai_next) {
if ((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
perror("client: socket");
continue;
} else {
printf("Please enter a message: ");
fgets(buf, MAX, stdin);
if (sendto(sockfd, buf, strlen(buf), 0, p->ai_addr, p->ai_addrlen) == -1) {
perror("Error while sending to server");
exit(1);
}
if ((actualSize = recvfrom(sockfd, buf, MAX-1, 0, p->ai_addr, &(p->ai_addrlen))) == -1) {
perror("recv");
exit(1);
}
buf[actualSize] = '\0';
break;
}
}
printf ("%s\n", buf);
close(sockfd);
return 0;
}