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 Client 以后需要接收一些状态码形式的响应。那么,我需要在这里使用 bind() 函数吗?

4

2 回答 2

4

您需要查找套接字connect()的作用。SOCK_DGRAM这并不意味着对等点的存在。它只建立一个入站和出站 IP 地址过滤器。参见man 2 connect

于 2013-11-01T05:08:42.230 回答
1

对于 UDP 通信,您需要使用 Sendto 和 Receivefrom 函数,UDP 通信不需要绑定和连接。尝试搜索这两个功能并使用它们。:)

于 2013-11-01T05:17:53.327 回答