设为首页 加入收藏

TOP

2.2.2 小试牛刀--模拟实现Windows的UDP程序(8)
2013-10-07 15:53:22 来源: 作者: 【 】 浏览:80
Tags:2.2.2 小试牛刀 模拟 实现 Windows UDP 程序

2.2.2  小试牛刀--模拟实现Windows的UDP程序(8)

(4) 用户帮助模块

用户帮助模块包括全局用户帮助、广播用户帮助和多播用户帮助,具体实现函数如下。

userHelpAll():实现全局用户帮助。

userHelpBro():实现广播用户帮助。

userHelpMul():实现多播用户帮助。

具体实现代码如下:

  1. /*全局用户帮助函数*/  
  2. void userHelpAll()  
  3. {  
  4. printf("Please choose broadcast[-b] or multicast[-m] !\n");   
  5. printf("userHelpAll: -b [-s][p][-h][-n] | -m[-s][-h][-p][-i][-l][-n]\n");  
  6. userHelpBro();  
  7. userHelpMul();  
  8. }  
  9.  
  10. /*广播用户帮助函数*/  
  11. void userHelpBro()  
  12. {  
  13. printf("Broadcast: -b -s:str -p:int -h:str -n:int\n");  
  14. printf("           -b     Start the broadcast program.\n");  
  15. printf("           -s     Act as server (send data); otherwise\n");  
  16. printf("                  receive data. Default is receiver.\n");  
  17. printf("           -p:int Port number to use\n ");  
  18. printf("                  The default port is 5050.\n");  
  19. printf("           -h:str The decimal broadcast IP address.\n");  
  20. printf("           -n:int The Number of messages to send/receive.\n");  
  21. printf("                  The default number is 10.\n");  
  22. }  
  23.  
  24. /*多播用户帮助函数*/  
  25. void userHelpMul()  
  26. {  
  27. printf("Multicast: -m -s -h:str -p:int -i:str -l -n:int\n");  
  28. printf("           -m     Start the multicast program.\n");  
  29. printf("           -s      Act as server (send data); otherwise\n");  
  30. printf("                   receive data. Default is receiver.\n");  
  31. printf("           -h:str  The decimal multicast IP address to join\n");  
  32. printf("                   The default group is: %s\n", MCASTADDR);  
  33. printf("           -p:int  Port number to use\n");  
  34. printf("                   The default port is: %d\n", MCASTPORT);  
  35. printf("           -i:str  Local interface to bind to; by default \n");  
  36. printf("                   use INADDRY_ANY\n");  
  37. printf("           -l      Disable loopback\n");  
  38. printf("           -n:int  Number of messages to send/receive\n");  
  39. ExitProcess(-1);  
  40. }  

(5) 广播信息发送模块

广播消息发送模块实现广播消息的发送功能,即在指定广播地址和端口上发送指定数量的消息。该模块由函数broadcastSend()来实现,该函数需要接收选项"-h(广播地址)"、"-p(端口号)"、"-n(发送数量)",如果用户没有提供这些选项,函数将以默认值执行。具体代码如下:

  1. /*广播消息发送函数*/  
  2. void broadcastSend()  
  3. {  
  4. /*设置广播的消息*/  
  5. char *smsg = "The message received is from sender!";  
  6. BOOL opt = TRUE;  
  7. int nlen = sizeof(addrBro);  
  8. int ret;  
  9. DWORD i=0;  
  10.  
  11. /*创建UDP套接字*/  
  12. socketBro = WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);  
  13. /*如果创建失败*/  
  14. if(socketBro==INVALID_SOCKET)  
  15. {  
  16. printf("Create socket failed:%d\n", WSAGetLastError());  
  17. WSACleanup();  
  18. return;  
  19. }  
  20.  
  21. /*设置广播地址各个选项*/  
  22. addrBro.sin_family = AF_INET;  
  23. addrBro.sin_addr.s_addr = bcastAddr;  
  24. addrBro.sin_port = htons(bPort);  
  25.  
  26. /*设置该套接字为广播类型*/  
  27. if (setsockopt(socketBro,SOL_SOCKET,SO_BROADCAST,(char FAR *)&opt,  
  28.       sizeof(opt)) == SOCKET_ERROR)  
  29. /*如果设置失败*/  
  30. {  
  31. printf("setsockopt failed:%d", WSAGetLastError());  
  32. closesocket(socketBro);  
  33. WSACleanup();  
  34. return;  
  35. }  
  36. /*循环发送消息*/  
  37. while(i < bCount)  
  38. {  
  39. /*延迟1秒*/  
  40. Sleep(1000);  
  41. /*从广播地址发送消息*/  
  42. ret = sendto(socketBro,smsg,256,0,(struct sockaddr*)&addrBro,nlen);  
  43. /*如果发送失败*/  
  44. if(ret == SOCKET_ERROR)  
  45. printf("Send failed:%d", WSAGetLastError());  
  46. /*如果发送成功*/  
  47. else  
  48. {         
  49. printf("Send message %d!\n", i);      
  50. }  
  51. i++;  
  52. }  
  53. /*发送完毕后关闭套接字、释放占用资源*/  
  54. closesocket(socketBro);  
  55. WSACleanup();  
  56. }  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.2.2 小试牛刀--模拟实现Windows.. 下一篇1.2.2 开发准备(1)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++中智能指针的性能 (2025-12-25 03:49:29)
·如何用智能指针实现c (2025-12-25 03:49:27)
·如何在 C 语言中管理 (2025-12-25 03:20:14)
·C语言和内存管理有什 (2025-12-25 03:20:11)
·为什么C语言从不被淘 (2025-12-25 03:20:08)