WinC/C++ Socket Server demo


  1. // WinServer.cpp : 定义控制台应用程序的入口点。
  2. //

  3. #include "stdafx.h"
  4. // 告知编译器,在编译后的链接阶段可以链接“ws2_32.lib”
  5. #pragma comment(lib,"ws2_32.lib")

  6. #include stdio.h>
  7. #include WinSock2.h>
  8. //#include WinSock.h>
  9. #include stdlib.h>
  10. #include string.h>
  11. #include time.h>
  12. #include stdio.h>
  13. #include process.h>
  14. #include Windows.h>

  15. #define TEST_LISTEN_BACKLOG 0//1
  16. #define SERVER_PORT 4600 // define the defualt connect port id
  17. #define LENGTH_OF_LISTEN_QUEUE 10//1 // length of listen queue in server
  18. #define BUFFER_SIZE 255

  19. //void *thread(void *client_fd)
  20. DWORD WINAPI thread( LPVOID lpParam )
  21. {
  22.     char buf[BUFFER_SIZE] = {'\0'};
  23.     long timestamp;
  24.     
  25.     time_t rawtime;
  26.     struct tm *timeinfo;

  27.     while (1)
  28.     {
  29.         memset(buf, '\0', BUFFER_SIZE);
  30.         if (recv((*(int *)lpParam), buf, BUFFER_SIZE, 0) 0)
  31.         {
  32.             fprintf(stderr, "get message from client error\n");
  33.             closesocket(*(int *)lpParam);
  34.             break;
  35.         }

  36.         // Transmission
  37.         Sleep(1000);
  38.         strcat(buf, " : ");
  39.         time(&rawtime);
  40.         timeinfo = localtime(&rawtime);
  41.         strcat(buf,""+timeinfo->tm_sec);

  42.         puts(buf);
  43.         send((*(int *)lpParam), buf, strlen(buf), 0);
  44.     }
  45.     return NULL;
  46. }

  47. int _tmain(int argc, _TCHAR* argv[])
  48. {
  49.     int server_fd,client_fd;
  50.     struct sockaddr_in servaddr;
  51.     struct sockaddr_in client_addr;

  52.     WSADATA wsaD;
  53.     WSAStartup(MAKEWORD(2,2),&wsaD);
  54.     server_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  55.     if(server_fd == SOCKET_ERROR)
  56.     {
  57.         printf("new socket error!");
  58.         getchar();
  59.         return -1;
  60.     }

  61.     /* two way for init the char array ....
  62.      bzero(&servaddr, sizeof(servaddr)); */
  63.     memset(&servaddr,0,sizeof(servaddr));

  64.     servaddr.sin_family = AF_INET;
  65.     servaddr.sin_port = htons(SERVER_PORT);
  66.     servaddr.sin_addr.s_addr = INADDR_ANY; //htons(INADDR_ANY);

  67.     int error = 0;
  68.     error = bind(server_fd, (struct sockaddr*)&servaddr, sizeof(servaddr));
  69.     if(error0)
  70.     {
  71.         printf("bind error");
  72.     }


  73.     listen(server_fd, LENGTH_OF_LISTEN_QUEUE);

  74. #if TEST_LISTEN_BACKLOG
  75.     /* wait the client to connect */
  76.     for (;;)
  77.     {
  78.         printf("server is listening! \n");
  79.         Sleep(1);
  80.     }
  81. #else
  82.     printf("server is listening! \n");
  83. #endif

  84.     while (1)
  85.     {
  86.         int length = sizeof(client_addr);
  87.         client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &length);
  88.         if(client_fd == -1)
  89.         {
  90.             Sleep(1000);
  91.             continue;
  92.         }

  93.         printf("a client connected: IP %s PORT %d\n",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));

  94.         Sleep(1000);
  95.         // windows C create thread ....
  96.         if(CreateThread(NULL,0,thread,(void*)&client_fd,0,NULL)==NULL)
  97.         {
  98.             fprintf(stderr, "create thread error\n");
  99.             exit(1);
  100.         }
  101.     }

  102.     closesocket(server_fd);
  103.     return 0;
  104. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值