gpt4 book ai didi

c - UDP 客户端显示 'UDP Connected' 而没有 UDP 服务器在本地主机上运行

转载 作者:太空宇宙 更新时间:2023-11-04 01:07:30 27 4
gpt4 key购买 nike

下面这个函数有什么问题??

它应该抛出错误,因为我没有在本地主机上运行 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 服务器时,它会显示连接错误,而当 TCP服务器运行 TCP Connected

上面提到的UDP Client将来需要以一些状态码的形式接收响应。那么,我需要在这里使用 bind() 函数吗??

最佳答案

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

关于c - UDP 客户端显示 'UDP Connected' 而没有 UDP 服务器在本地主机上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19721105/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com