设为首页 加入收藏

TOP

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

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

④ 数据传输控制模块

客户端程序会把数据的传入传出部分放在主函数中执行,也就是说此处的数据传输功能是通过主函数实现的。主函数中包括套接字创建、绑定和释放,并实现对服务器连接、数据发送、数据接收等各个模块的调用。具体实现代码如下:

  1. /*主函数*/  
  2. int main(int argc, char **argv)  
  3. {  
  4. SOCKET clientfd;  
  5. int err;  
  6. struct sockaddr_in serverAddr;  
  7. struct hostent *ptrHost;  
  8. char response[4096];  
  9. char *msg = "HELLO SERVER";  
  10. GetArgments(argc, argv);  
  11. if (argc != 3)   
  12. {  
  13. userHelp();  
  14. return 1;  
  15. }  
  16. GetArgments(argc,argv);  
  17. InitSockets();  
  18. /*创建套接字*/  
  19. clientfd = socket(PF_INET, SOCK_STREAM, 0);  
  20. /*如果创建失败*/  
  21. if (clientfd == INVALID_SOCKET)  
  22. {  
  23. ErrorPrint("no more socket resources");  
  24. return 1;  
  25. }  
  26. /*根据IP地址解析主机名*/  
  27. if (atoi(hostName))  
  28. {  
  29. u_long ip_addr = inet_addr(hostName);  
  30. ptrHost = gethostbyaddr((char*)&ip_addr,  
  31.             sizeof(u_long), AF_INET);  
  32. }  
  33. /*根据主机名解析IP地址*/  
  34. else  
  35. ptrHost = gethostbyname(hostName);  
  36.  
  37. /*如果解析失败*/  
  38. if (!ptrHost)  
  39. {  
  40. ErrorPrint("cannot resolve hostname");  
  41. return 1;  
  42. }  
  43.  
  44. /*设置服务器端地址选项*/  
  45. serverAddr.sin_family = PF_INET;  
  46. memcpy((char*)&(serverAddr.sin_addr),  
  47.         ptrHost->h_addr, ptrHost->h_length);  
  48. serverAddr.sin_port = htons(port);  
  49.  
  50. /*连接服务器*/  
  51. err = connect(clientfd, (struct sockaddr *) &serverAddr,  
  52.              sizeof(serverAddr));  
  53. /*连接失败*/  
  54. if (err == INVALID_SOCKET)  
  55. {  
  56. ErrorPrint("cannot connect to server");  
  57. return 1;  
  58. }  
  59. /*连接成功后,输出信息*/  
  60. printf("You are connected to the server\n");  
  61. /*发送消息到服务器端*/  
  62. send(clientfd, msg, strlen(msg)+1, 0);  
  63. memset(response, 0, sizeof(response));  
  64. /*接收来自服务器端的消息*/  
  65. recv(clientfd, response, sizeof(response), 0);  
  66. printf("server says %s\n", response);  
  67. /*关闭套接字*/  
  68. closesocket(clientfd);  
  69. /*释放Winscoket初始化时占用的资源*/  
  70. WSACleanup();  
  71. return 0;  
  72. }  

到此为止,整个实例设计完毕,编译执行后的效果如图2-6所示。
 
图2-6  执行效果
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.1.2 小试牛刀--模拟实现Windows.. 下一篇2.2.1 UDP协议基础(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)