以下功能有什么问题?
它应该抛出一个错误,因为我没有在 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() 函数吗?