加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

接收UDP错误:连接被拒绝

发布时间:2020-12-16 03:06:17 所属栏目:百科 来源:网络整理
导读:我试图通过UDP在特定端口发送字符串HI到服务器,然后接收响应.但是,在尝试使用recvfrom()获取响应后,我被卡在阻塞状态.我尝试使用连接的UDP,但我得到: Error receiving in UDP: Connection refused 这可能是什么原因?服务器不在我的控制之下,但我知道它的工
我试图通过UDP在特定端口发送字符串HI到服务器,然后接收响应.但是,在尝试使用recvfrom()获取响应后,我被卡在阻塞状态.我尝试使用连接的UDP,但我得到:

Error receiving in UDP: Connection refused

这可能是什么原因?服务器不在我的控制之下,但我知道它的工作正常.

我已经添加了代码

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在线上发生了什么.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读