设为首页 加入收藏

TOP

2.1.2 小试牛刀--模拟实现Windows的TCP程序(6)
2013-10-07 15:53:47 来源: 作者: 【 】 浏览:78
Tags:2.1.2 小试牛刀 模拟 实现 Windows TCP 程序

2.1.2  小试牛刀--模拟实现Windows的TCP程序(6)

(2) 客户端

① 预处理

预处理包括文件导入、头文件加载、定义常量、定义变量等操作。具体代码如下:

  1. /*导入库文件*/  
  2. #pragma comment(lib, "wsock32.lib")  
  3. /*加载头文件*/  
  4. #include <stdio.h> 
  5. #include <winsock2.h> 
  6.  
  7. /*自定义函数*/  
  8. int InitSockets(void);  
  9.  
  10. void GetArgument(int argc, char **argv);  
  11. void ErrorPrint(x);  
  12. void userHelp();  
  13.  
  14. /*定义全局变量*/  
  15. unsigned short port;  
  16. char *hostName;  


② 初始化模块

初始化模块无需对全局变量赋值,只须实现对Winsock的初始化,包括初始化套接字版本号和加载Winsock库。具体代码如下:

  1. /*初始化Winsock函数*/  
  2. int InitSockets(void)  
  3. {  
  4. WSADATA wsaData;  
  5. WORD sockVersion;  
  6. int err;  
  7.  
  8. /*设置Winsock版本号*/  
  9. sockVersion = MAKEWORD(2, 2);  
  10. /*初始化Winsock*/  
  11. err = WSAStartup(sockVersion, &wsaData);  
  12. /*如果初始化失败*/  
  13. if (err != 0)  
  14. {  
  15. printf("Error %d: Winsock not available\n", err);  
  16. return 1;  
  17. }  
  18. return 0;  
  19. }  

③ 功能控制模块

此模块提供了参数获取、错误输出和用户帮助等功能,上述功能分别通过如下函数来实现。

GetArgments:用于获取用户提供的选项值。

ErrorPrint:用于输出错误。

userHelp:用于输出帮助信息。

对应的实现代码如下:

  1. /*获取选项函数*/  
  2. void GetArgments(int argc, char **argv)  
  3. {  
  4. int i;  
  5. for(i=1; i<argc; i++)  
  6. {  
  7. /*参数的第一个字符若是“-”*/  
  8. if (argv[i][0] == '-')  
  9. {  
  10. /*转换成小写*/  
  11. switch (tolower(argv[i][1]))  
  12. {  
  13. /*若是端口号*/  
  14. case 'p':   
  15. if (strlen(argv[i]) > 3)  
  16. port = atoi(&argv[i][3]);  
  17. break;  
  18. /*若是主机名*/  
  19. case 'h':   
  20. hostName = &argv[i][3];  
  21. break;  
  22. /*其他情况*/  
  23. default:  
  24. userHelp();  
  25. break;  
  26. }  
  27. }  
  28. }  
  29. return;  
  30. }  
  31.  
  32. /*错误输出函数*/  
  33. void ErrorPrint(x)  
  34. {   
  35. printf("Error %d: %s\n", WSAGetLastError(), x);  
  36. }  
  37.  
  38. /*用户帮助函数*/  
  39. void userHelp()  
  40. {  
  41. printf("userHelp:  -h:str -p:int\n");  
  42. printf("           -h:str  The host name \n");  
  43. printf("           -p:int  The Port number to use\n");  
  44. ExitProcess(-1);  
  45. }  

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

评论

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

·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)