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();
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值