1

次の関数の何が問題になっていますか??

localhost で実行されている UDP サーバーがないため、エラーがスローされるはずです。

int openUdpSocket(int port) {


    int sock,sin_size;
    struct sockaddr_in server_addr;

    memset(&server_addr, 0, sizeof(server_addr));

    struct hostent *host;
    host= (struct hostent *) gethostbyname((char *)"127.0.0.1"); 

    if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
      perror("socket");
      exit(1);
    }   

    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(port);
    server_addr.sin_addr = *((struct in_addr *)host->h_addr);

    bzero(&(server_addr.sin_zero),8);
    sin_size = sizeof(struct sockaddr);

次の部分が問題を引き起こしています: -

   int error = connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr));

   if(error < 0){ 
      printf("Connection error\n");
      exit(-1);
   }   

   if (verbose) 
     printf("UDP connected\n");

return sock;

}

出力:

    udit@mylaptop:~/Desktop/benchmark$ ./a.out 
    UDP connected

TCP同様の関数を作成しましたが、同じことがTCPで正常に機能していることに注意してください。つまり、TCPサーバーが実行されていない場合connection error、およびTCPサーバーが実行されている場合に表示されますTCP Connected

上記の UDP クライアントは、将来、いくつかのステータス コードの形式で応答を受信する必要があります。SO、ここで bind() 関数を使用する必要がありますか??

4

2 に答える 2

1

UDP 通信の場合は、Sendto および Receivefrom 関数を使用する必要があります。UDP 通信には bind と connect は必要ありません。この2つの機能について検索して使用してみてください。:)

于 2013-11-01T05:17:53.327 に答える