接收UDP错误:连接被拒绝
发布时间:2020-12-16 03:06:17 所属栏目:百科 来源:网络整理
导读:我试图通过UDP在特定端口发送字符串HI到服务器,然后接收响应.但是,在尝试使用recvfrom()获取响应后,我被卡在阻塞状态.我尝试使用连接的UDP,但我得到: Error receiving in UDP: Connection refused 这可能是什么原因?服务器不在我的控制之下,但我知道它的工
我试图通过UDP在特定端口发送字符串HI到服务器,然后接收响应.但是,在尝试使用recvfrom()获取响应后,我被卡在阻塞状态.我尝试使用连接的UDP,但我得到:
这可能是什么原因?服务器不在我的控制之下,但我知道它的工作正常. 我已经添加了代码 int sockfdudp; char bufudp[MAXDATASIZE],port[6]; struct addrinfo hints,*servinfo,*p; struct sockaddr_storage addr; int rv; char s[INET6_ADDRSTRLEN]; int bytes_recv,bytes_sent; socklen_t len; scanf("%s",port); printf("UDP Port: %s n",port); // Start connecting to datagram server memset(&hints,sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; if ((rv = getaddrinfo(SERVER_NAME,port,&hints,&servinfo)) != 0) { fprintf(stderr,"getaddrinfo: %sn",gai_strerror(rv)); return 1; } // loop through all the results and make a socket for(p = servinfo; p != NULL; p = p->ai_next) { if ((sockfdudp = socket(p->ai_family,p->ai_socktype,p->ai_protocol)) == -1) { perror("Creating datagram socket"); continue; } if (connect(sockfdudp,p->ai_addr,p->ai_addrlen) == -1) { close(sockfdudp); perror("Connecting stream socket"); continue; } break; } if (p == NULL) { fprintf(stderr,"ClientUDP: failed to bind socketn"); return 2; } freeaddrinfo(servinfo); if ((bytes_sent = sendto(sockfdudp,UDP_MSG,strlen(UDP_MSG),p->ai_addrlen)) == -1) { perror("ClientUDP: Error sending data"); exit(1); } printf("Data %s sentn",UDP_MSG ); len = sizeof(struct sockaddr_storage); if ((bytes_recv = recvfrom(sockfdudp,bufudp,MAXDATASIZE-1,(struct sockaddr*)&addr,&len)) == -1) { perror("Error receiving in UDP"); exit(1); } printf("Bytes recv %dn",bytes_recv); bufudp[bytes_recv] = ' '; printf("ClientUDP: Receivedn %s n",bufudp ); close(sockfdudp); return 0; 解决方法
有可能是将某些东西发送给不在该特定端口上收听的服务器.
这将导致icmp消息被发回,并且您的下一个recvfrom将在连接套接字的情况下返回错误. 检查tcpdump或wireshark在线上发生了什么. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |