C中的UDP客户端:不知道为什么它不起作用

时间:2017-11-15 22:40:32

标签: c sockets networking network-programming udp

我们应该为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;
}

0 个答案:

没有答案