设为首页 加入收藏

TOP

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

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

④ 循环控制模块

此模块的功能是通过函数LoopControl实现的,具体代码如下:

  1. /*循环控制函数*/  
  2. int LoopControl(SOCKET listenfd, int isMultiTasking)  
  3. {  
  4. SOCKET acceptfd;  
  5. struct sockaddr_in clientAddr;  
  6. int err;  
  7. int nSize;  
  8. int serverNum = 0;  
  9. HANDLE handles[MAX_SER];  
  10. int myID;  
  11.  
  12. /*服务次数小于最大服务次数*/  
  13. while (serverNum < maxService)  
  14. {  
  15. nSize = sizeof(clientAddr);  
  16. /*接收客户端请求*/  
  17. acceptacceptfd = accept(listenfd, (struct sockaddr *)  
  18.                          &clientAddr, &nSize);  
  19. /*如果接收失败*/  
  20. if (acceptfd == INVALID_SOCKET)  
  21. {  
  22. ErrorPrint("Error: accept failed\n");  
  23. return 1;  
  24. }  
  25. /*接收成功*/  
  26. printf("Accepted connection from client at %s\n",  
  27.              inet_ntoa(clientAddr.sin_addr));  
  28. /*如果允许多任务执行*/  
  29. if (isMultiTasking)   
  30. {  
  31. /*创建一个新线程来执行任务,新线程的初始堆栈大小为1000,线程执行函数  
  32. 是Service(),传递给Service()的参数为acceptfd*/  
  33. handles[serverNum] = CreateThread(NULL, 1000,  
  34.                       (LPTHREAD_START_ROUTINE)Service,  
  35.                       (LPVOID) acceptfd, 0, &myID);  
  36.  
  37. }  
  38. else  
  39. /*直接调用服务客户端的函数*/  
  40. Service((LPVOID)acceptfd);  
  41. serverNum++;  
  42. }  
  43.  
  44. if (isMultiTasking)  
  45. {  
  46. /*在一个线程中等待多个事件,当所有对象都被通知时函数才会返回,且等待没有时间限制*/  
  47. err = WaitForMultipleObjects(maxService, handles, TRUE, INFINITE);  
  48. printf("Last thread to finish was thread #%d\n", err);  
  49. }  
  50. return 0;  
  51. }  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇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)