VC下socket网络编程实现

sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字。在这个程序中,将两个工程添加到一个工作区。要链接一个ws2_32.lib的库文件。

服务器端编程的步骤:

1:加载套接字库,创建套接字(WSAStartup()/socket());

2:绑定套接字到一个IP地址和一个端口上(bind());

3:将套接字设置为监听模式等待连接请求(listen());

4:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept());

5:用返回的套接字和客户端进行通信(send()/recv());

6:返回,等待另一连接请求;

7:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。

服务器端代码如下:
[cpp]  view plain copy
  1. #include <stdio.h>  
  2. #include <Winsock2.h>  
  3. void main()  
  4. {  
  5.  WORD wVersionRequested;  
  6.  WSADATA wsaData;  
  7.  int err;  
  8.    
  9.  wVersionRequested = MAKEWORD( 1, 1 );  
  10.    
  11.  err = WSAStartup( wVersionRequested, &wsaData );  
  12.  if ( err != 0 ) {  
  13.   return;  
  14.  }  
  15.    
  16.  if ( LOBYTE( wsaData.wVersion ) != 1 ||  
  17.         HIBYTE( wsaData.wVersion ) != 1 ) {  
  18.   WSACleanup( );  
  19.   return;  
  20.  }  
  21.  SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);  
  22.   
  23.  SOCKADDR_IN addrSrv;  
  24.  addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);  
  25.  addrSrv.sin_family=AF_INET;  
  26.  addrSrv.sin_port=htons(6000);  
  27.    
  28.  bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));  
  29.   
  30.  listen(sockSrv,5);  
  31.   
  32.  SOCKADDR_IN addrClient;  
  33.  int len=sizeof(SOCKADDR);  
  34.  while(1)  
  35.  {  
  36.   SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);  
  37.   char sendBuf[50];  
  38.   sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));  
  39.   send(sockConn,sendBuf,strlen(sendBuf)+1,0);  
  40.   char recvBuf[50];  
  41.   recv(sockConn,recvBuf,50,0);  
  42.   printf("%s/n",recvBuf);  
  43.   closesocket(sockConn);  
  44.  }  
  45.   
  46. }  
客户端编程的步骤:

1:加载套接字库,创建套接字(WSAStartup()/socket());

2:向服务器发出连接请求(connect());

3:和服务器端进行通信(send()/recv());

4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。

客户端的代码如下:
[cpp]  view plain copy
  1. #include <stdio.h>  
  2. #include <Winsock2.h>  
  3. void main()  
  4. {  
  5.  WORD wVersionRequested;  
  6.  WSADATA wsaData;  
  7.  int err;  
  8.    
  9.  wVersionRequested = MAKEWORD( 1, 1 );  
  10.    
  11.  err = WSAStartup( wVersionRequested, &wsaData );  
  12.  if ( err != 0 ) {  
  13.   return;  
  14.  }  
  15.    
  16.  if ( LOBYTE( wsaData.wVersion ) != 1 ||  
  17.         HIBYTE( wsaData.wVersion ) != 1 ) {  
  18.   WSACleanup( );  
  19.   return;  
  20.  }  
  21.  SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);  
  22.    
  23.  SOCKADDR_IN addrSrv;  
  24.  addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");  
  25.  addrSrv.sin_family=AF_INET;  
  26.  addrSrv.sin_port=htons(6000);  
  27.  connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));  
  28.  send(sockClient,"hello",strlen("hello")+1,0);  
  29.  char recvBuf[50];  
  30.  recv(sockClient,recvBuf,50,0);  
  31.  printf("%s/n",recvBuf);  
  32.    
  33.  closesocket(sockClient);  
  34.  WSACleanup();  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值