C++ Socket 多线程

C++ Socket 多线程
2011年06月09日
  client.cpp
  #include
  #include
  #pragma comment(lib, "ws2_32")
  #define LEN 1024
  #define TRUE 1
  #define FALSE_F -1
  #define OK 1
  #define ERROR_R -1
  int main()
  {
  int i=100;
  int ret;
  char buf1[LEN];
  char buf[LEN];
  WORD wdVersionRequired;
  WSADATA wsaData;
  memset(buf, 0, sizeof(buf));
  memset(buf1, 0, sizeof(buf1));
  wdVersionRequired = MAKEWORD(2, 2); /* 2.2°汾 */
  WSAStartup(wdVersionRequired, &wsaData);
  while(i--)
  {
  SOCKET sock;
  sockaddr_in saServer;
  sock = socket(AF_INET, SOCK_STREAM, 0);
  if (SOCKET_ERROR == sock)
  {
  return FALSE;
  }
  memset(&saServer, 0, sizeof(saServer));
  saServer.sin_family = AF_INET;
  saServer.sin_addr.S_un.S_addr = inet_addr("192.168.2.80");
  saServer.sin_port = htons(8066);
  if(connect(sock, (const sockaddr*)&saServer, sizeof(sockaddr)) != 0)
  {
  printf("connect error\n");
  }
  memset(buf, 0, sizeof(buf));
  strcpy(buf, "hello world");
  if(0 == send(sock, buf, strlen(buf), 0))
  {
  printf("send error\n");
  break;
  }
  ret = recv(sock, buf1, sizeof(buf1), 0);
  buf1[ret]='\0';
  printf("buf1: %s\n\n", buf1);
  closesocket(sock);
  }
  WSACleanup();
  return 1;
  }
  ================================================
  /*******************************
  server.cpp
  ********************************/
  #include
  #include
  #pragma comment(lib, "ws2_32")
  #define LEN 1024
  #define OK 1
  #define ERROR_R -1
  #define FALSE 0
  #define TRUE 1
  DWORD WINAPI AnswerThread(LPVOID lparam)
  {
  int err;
  char buf[32]="";
  char recvbuf[32]="yes receive!!";
  SOCKET ClientSocket=(SOCKET)(LPVOID)lparam;
  // memset(recvbuf, 0, sizeof(recvbuf));
  memset(buf, 0, sizeof(buf));
  err = recv(ClientSocket, buf, sizeof(buf), 0);
  send(ClientSocket, recvbuf, strlen(recvbuf), 0);
  buf[err]='\0';
  printf("revc: %s\n", buf);
  closesocket(ClientSocket);
  return OK;
  }
  int main()
  {
  int err;
  SOCKET sock;
  SOCKET sClient;
  DWORD dwThreadId;
  WORD wdVersionRequired;
  HANDLE hThread;
  WSADATA wsaData;
  sockaddr_in saServer, cli_addr;
  int len = sizeof(cli_addr);
  wdVersionRequired = MAKEWORD(2, 2); //³ÌÐòҪʹÓÃ2.2°æ±¾
  //×¢Ò⺯Êý??µ»ØÖµ£¬0±íʾÕý³£
  if ((err = WSAStartup(wdVersionRequired, &wsaData)) != 0)// ³õʼ»¯WinSock¿â¡£
  return FALSE;
  if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
  {
  printf(" create socket error\n");
  }
  saServer.sin_family = AF_INET;
  saServer.sin_addr.S_un.S_addr = inet_addr("192.168.2.80");
  saServer.sin_port = htons(8066);
  if ((err = bind(sock, (const sockaddr *)&saServer, sizeof(sockaddr)))!= 0)
  {
  printf("failed bind\n");
  }
  if ((err = listen(sock, 100)) != 0)//listen()¼àÌý
  {
  printf("failed listen\n");
  }
  while(1)
  {
  sClient = accept(sock, (struct sockaddr*)&cli_addr, &len);
  Sleep(1000);
  hThread=CreateThread(NULL,NULL, AnswerThread,(LPVOID)sClient, 0, &dwThreadId);
  if(hThread==NULL)
  printf("CreatThread AnswerThread() failed.\n");
  else
  printf("CreateThread OK.\n");
  }
  closesocket(sock);
  WSACleanup();
  return TRUE;
  }
  本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xinxijisuan/archive/2011/03/07/6227961.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值