C++ Socket编程步骤 第一版

1:Server端

  

#include <stdio.h>
#include <Winsock2.h>

#pragma comment(lib, "ws2_32.lib")
void  main()
{
  WORD  wVersionRequested;
  WSADATA wsaData;
  int  err;
  
  wVersionRequested = MAKEWORD( 1, 1 );
  
  err = WSAStartup( wVersionRequested, &wsaData );
  if  ( err != 0 ) {
   return ;
  }
  
  if  ( LOBYTE( wsaData.wVersion ) != 1 ||
         HIBYTE( wsaData.wVersion ) != 1 ) {
   WSACleanup( );
   return ;
  }
  SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
 
  SOCKADDR_IN addrSrv;
  addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
  addrSrv.sin_family=AF_INET;
  addrSrv.sin_port=htons(6000);
  
  bind(sockSrv,(SOCKADDR*)&addrSrv, sizeof (SOCKADDR));
 
  listen(sockSrv,5);
 
  SOCKADDR_IN addrClient;
  int  len= sizeof (SOCKADDR);
  while (1)
  {
   SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
   char  sendBuf[50];
   sprintf (sendBuf, "Welcome %s to here!" ,inet_ntoa(addrClient.sin_addr));
   send(sockConn,sendBuf, strlen (sendBuf)+1,0);
   char  recvBuf[50];
   recv(sockConn,recvBuf,50,0);
   printf ( "%s\n" ,recvBuf);
   closesocket(sockConn);
  }
 
}
 
 
 
2.客户端:
  #include < stdio.h >
#include < Winsock2.h >
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested
= MAKEWORD( 1 , 1 );

err
= WSAStartup( wVersionRequested, & wsaData );
if ( err != 0 ) {
return ;
}

if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion )
!= 1 ) {
WSACleanup( );
return ;
}
SOCKET sockClient
= socket(AF_INET,SOCK_STREAM, 0 );

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr
= inet_addr( " 127.0.0.1 " );
addrSrv.sin_family
= AF_INET;
addrSrv.sin_port
= htons( 6000 );
connect(sockClient,(SOCKADDR
* ) & addrSrv, sizeof (SOCKADDR));
send(sockClient,
" hello " ,strlen( " hello " ) + 1 , 0 );
char recvBuf[ 50 ];
recv(sockClient,recvBuf,
50 , 0 );
printf(
" %s\n " ,recvBuf);

closesocket(sockClient);
WSACleanup();
}

 

第二升级:

改进支持多客户端连接;

怎么办,accpet一个连接后,立刻就起一个线程这样 针对每个客户端 启动一个线程去hold住,做接收和发送的工作 ,这样可以支持多个

客户端了

第三部分:

 iocp方式,要知道线程这个东西是很消耗cpu资源的, 并且线程数量是有限的,并且io也消耗资源所以需要使用iocp这种框架系统

去做!!

 

猜你喜欢

转载自yangbinfx.iteye.com/blog/2119935