在发送下面的数据包之后,我需要立即绑定并监听它为我选择的任何随机端口,以获得对我的广播的任何响应.
// Open a socketint sd = socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);// Enable broadcastint broadcastEnable=1;setsockopt(sd,Sol_SOCKET,SO_broADCAST,&broadcastEnable,sizeof(broadcastEnable));// Configure the port and ip we want to send tostruct sockaddr_in broadcastAddr; // Make an endpointmemset(&broadcastAddr,sizeof(broadcastAddr));broadcastAddr.sin_family = AF_INET;inet_pton(AF_INET,"239.255.255.250",&broadcastAddr.sin_addr); // Set the broadcast IP addressbroadcastAddr.sin_port = htons(1900); // Set port 1900// Send itchar *request = "M-SEARCH * http/1.1\r\nHOST:239.255.255.250:1900\r\nMAN:\"ssdp:discover\"\r\nST:ssdp:all\r\nMX:1\r\n\r\n";sendto(sd,request,strlen(request),(struct sockaddr*)&broadcastAddr,sizeof(broadcastAddr));close(sd);解决方法 您不需要找到端口 – 只需在您用来发送的套接字上调用recv()或recvfrom(),它将使用相同的本地端口(当您执行sendto()时端口将被绑定).
您也可以在发送套接字上调用getsockname()来查找端口号以供参考,但是您仍然应该使用发送套接字来接收 – 如果不这样做,则绑定套接字和响应之间存在竞争条件来自可能导致您丢失回复的网络.
@H_419_24@ 总结以上是内存溢出为你收集整理的发送UDP数据包时,如何取回系统分配的出站端口? (BSD C插座)全部内容,希望文章能够帮你解决发送UDP数据包时,如何取回系统分配的出站端口? (BSD C插座)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)