发送UDP数据包时,如何取回系统分配的出站端口? (BSD C插座)
发布时间:2020-12-16 09:33:51 所属栏目:百科 来源:网络整理
导读:发送UDP数据包时,如何取回系统分配的出站端口? 在发送下面的数据包之后,我需要立即绑定并监听它为我选择的任何随机端口,以获得对我的广播的任何响应. // Open a socketint sd = socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);// Enable broadcastint broadcastEn
发送UDP数据包时,如何取回系统分配的出站端口?
在发送下面的数据包之后,我需要立即绑定并监听它为我选择的任何随机端口,以获得对我的广播的任何响应. // Open a socket int sd = socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP); // Enable broadcast int broadcastEnable=1; setsockopt(sd,SOL_SOCKET,SO_BROADCAST,&broadcastEnable,sizeof(broadcastEnable)); // Configure the port and ip we want to send to struct sockaddr_in broadcastAddr; // Make an endpoint memset(&broadcastAddr,sizeof(broadcastAddr)); broadcastAddr.sin_family = AF_INET; inet_pton(AF_INET,"239.255.255.250",&broadcastAddr.sin_addr); // Set the broadcast IP address broadcastAddr.sin_port = htons(1900); // Set port 1900 // Send it char *request = "M-SEARCH * HTTP/1.1rnHOST:239.255.255.250:1900rnMAN:"ssdp:discover"rnST:ssdp:allrnMX:1rnrn"; sendto(sd,request,strlen(request),(struct sockaddr*)&broadcastAddr,sizeof(broadcastAddr)); close(sd); 解决方法
您不需要找到端口 – 只需在您用来发送的套接字上调用recv()或recvfrom(),它将使用相同的本地端口(当您执行sendto()时端口将被绑定).
您也可以在发送套接字上调用getsockname()来查找端口号以供参考,但是您仍然应该使用发送套接字来接收 – 如果不这样做,则绑定套接字和响应之间存在竞争条件来自可能导致您丢失回复的网络. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容