`
uk355uk
  • 浏览: 11491 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

TCP Socket编程 C/C++实现 (Windows Platform SDK)

 
阅读更多

TCP Socket编程 C/C++实现 (Windows Platform SDK)
2010年11月10日
  TCP Socket编程 C/C++实现 (Windows Platform SDK)
  Server:
  ------------------------------------------------------------
  #pragma comment(lib, "ws2_32.lib")
  #include
  #include 
  void main()
  {
  //版本协商
  WORD wVersionRequested;
  WSADATA wsaData;
  int err;
  wVersionRequested = MAKEWORD(1,1); //0x0101
  err = WSAStartup(wVersionRequested,&wsaData);
  if(err!=0)
  {
  return;
  }
  if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1) 
  //wsaData.wVersion!=0x0101
  {
  WSACleanup();
  return;
  }
  //创建Socket
  SOCKET sockSvr = socket(AF_INET,SOCK_STREAM,0);
  //创建IP地址和端口
  SOCKADDR_IN addrSvr;
  addrSvr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
  addrSvr.sin_family = AF_INET;
  addrSvr.sin_port = htons(6000);
  //绑定端口监听
  bind(sockSvr,(SOCKADDR*)&addrSvr,sizeof(SOCKADDR));
  listen(sockSvr,5);
  sockaddr_in addrClient;
  int len = sizeof(SOCKADDR);
  while(true)
  {
  //阻塞方法,获得一个客户Socket连接
  SOCKET sockConn = accept(sockSvr,(SOCKADDR*)&addrClient,&len);
  char sendbuffer[128];
  sprintf(sendbuffer,"Welcom %s!",inet_ntoa(addrClient.sin_addr));
  //向客户Socket发送数据
  send(sockConn,sendbuffer,strlen(sendbuffer)+1,0);
  char recvbuffer[128];
  //从客户Soc接受数据
  recv(sockConn,recvbuffer,128,0);
  printf("%s\n",recvbuffer);
  //关闭Socket
  closesocket(sockConn); 
  }
  closesocket(sockSvr);
  //释放Winsock资源
  WSACleanup();
  }
  Client:
  --------------------------------------------------------
  #pragma comment (lib,"ws2_32.lib")
  #include
  #include
  void main()
  {
  //版本协商
  WORD wVersionRequested;
  WSADATA wsaData;
  int err;
  wVersionRequested = MAKEWORD(1,1); //0x0101
  err = WSAStartup(wVersionRequested,&wsaData);
  if(err!=0)
  {
  return;
  }
  if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1) 
  //wsaData.wVersion!=0x0101
  {
  WSACleanup();
  return;
  }
  //创建连向服务器的套接字
  SOCKET sock = socket(AF_INET,SOCK_STREAM,0);
  //创建地址信息
  SOCKADDR_IN hostAddr;
  hostAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
  hostAddr.sin_family = AF_INET;
  hostAddr.sin_port = htons(6000);
  //连接服务器
  connect(sock,(SOCKADDR*)&hostAddr,sizeof(SOCKADDR));
  char revBuf[128];
  //从服务器获得数据
  recv(sock,revBuf,128,0);
  printf("%s\n",revBuf);
  //向服务器发送数据
  send(sock,"Hello Host!",12,0);
  closesocket(sock);
  }
  转自:http://blog.csdn.net/nyzhl/archive/2008/07/04/2612815.aspx
  UDP Socket编程 C/C++实现 (Windows Platform SDK)
  Server:
  -------------------------------------------------------
  #pragma comment (lib,"ws2_32.lib")
  #include
  #include 
  void main()
  {
  //版本协商
  WORD wVersionRequested;
  WSADATA wsaData;
  int err;
  wVersionRequested = MAKEWORD( 1, 1 );
  err = WSAStartup( wVersionRequested, &wsaData );
  if ( err != 0 ) {
  /* Tell the user that we could not find a usable */
  /* WinSock DLL.                                  */
  return;
  }
  /* Confirm that the WinSock DLL supports 2.2.*/
  /* Note that if the DLL supports versions greater    */
  /* than 2.2 in addition to 2.2, it will still return */
  /* 2.2 in wVersion since that is the version we      */
  /* requested.                                        */
  if ( LOBYTE( wsaData.wVersion ) != 1 ||
  HIBYTE( wsaData.wVersion ) != 1) {
  /* Tell the user that we could not find a usable */
  /* WinSock DLL.                                  */
  WSACleanup( );
  return; 
  }
  /* The WinSock DLL is acceptable. Proceed. */
  //创建数据报套接字 
  SOCKET svr = socket(AF_INET,SOCK_DGRAM,0);
  //创建本地地址信息
  SOCKADDR_IN addr;
  addr.sin_family = AF_INET;
  addr.sin_port = htons(6000);
  addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
  int len = sizeof(SOCKADDR);
  bind(svr,(SOCKADDR*)&addr,len);
  //创建客户端地址对象
  SOCKADDR_IN addrClient;
  char recvBuf[128];
  char sendBuf[128];
  char tempBuf[256];
  while(true)
  {
  //接收数据
  recvfrom(svr,recvBuf,128,0,(SOCKADDR*)&addrClient,&len);
  char* ipClient = inet_ntoa(addrClient.sin_addr);
  sprintf(tempBuf,"%s said: %s\n",ipClient,recvBuf);
  printf("%s",tempBuf);
  gets(sendBuf);
  //发送数据
  sendto(svr,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len);
  }
  closesocket(svr);
  WSACleanup();
  }
  Client:
  ------------------------------------------------------
  #pragma comment (lib,"ws2_32.lib")
  #include
  #include 
  void main()
  {
  //版本协商
  WORD wVersionRequested;
  WSADATA wsaData;
  int err;
  wVersionRequested = MAKEWORD( 1, 1 );
  err = WSAStartup( wVersionRequested, &wsaData );
  if ( err != 0 ) {
  /* Tell the user that we could not find a usable */
  /* WinSock DLL.                                  */
  return;
  }
  /* Confirm that the WinSock DLL supports 2.2.*/
  /* Note that if the DLL supports versions greater    */
  /* than 2.2 in addition to 2.2, it will still return */
  /* 2.2 in wVersion since that is the version we      */
  /* requested.                                        */
  if ( LOBYTE( wsaData.wVersion ) != 1 ||
  HIBYTE( wsaData.wVersion ) != 1 ) {
  /* Tell the user that we could not find a usable */
  /* WinSock DLL.                                  */
  WSACleanup( );
  return; 
  }
  /* The WinSock DLL is acceptable. Proceed. */
  //创建服务器套接字
  SOCKET Svr = socket(AF_INET,SOCK_DGRAM,0);
  //创建地址
  SOCKADDR_IN addrSvr;
  addrSvr.sin_family = AF_INET;
  addrSvr.sin_port = htons(6000);
  addrSvr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
  char recvBuf[128];
  char sendBuf[128];
  int len = sizeof(SOCKADDR);
  while(true)
  {
  gets(sendBuf);
  //发送数据
  sendto(Svr,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrSvr,len);
  //接收数据
  recvfrom(Svr,recvBuf,128,0,(SOCKADDR*)&addrSvr,&len);
  char* ipSvr = inet_ntoa(addrSvr.sin_addr);
  printf("%s said: %s\n",ipSvr,recvBuf);
  }
  closesocket(Svr);
  WSACleanup();
  }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics