VC++ socket通信例程 服务器+客户端

服务器端::::::::::
 
#include <winsock2.h>
#include <stdio.h>
void main()
{
  //加载套接字库,版本协商
  WORD wVersionRequired;
  WSADATA wsaData;
  int err;
 
  //请求库
  //WSAStartup( WORD wVersionRequired, WSADATA lpWSAData );
  wVersionRequired = MAKEWORD(1,1);
  err = WSAStartup( wVersionRequired, &wsaData );
 
  if ( err !=0 )
  {
    //不等于0就退出
    printf("error");
    return;
  }
 
  //高字节和低字节都不为1
  if (LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion) != 1)
  {
    WSACleanup();
    return;
  }
 
  //加载完后创建套接字
  //SOCKET socket( int af, int type, int protocal);
  //WSAGETLASTERROR();获得错误
  SOCKET sockSrv = socket( AF_INET, SOCK_STREAM,0 );
 
  //int bind(SOCKET s, const struct sockAddr FAR *name,int namelen);
  //该套接字本地地址信息const struct sockAddr FAR *name
  //inet_addr 将点分十进制字符串转换为u_long类型,相反的是inet_ntoa
  //bind();
  SOCKADDR_IN addrSrv;
  addrSrv.sin_addr.S_un.S_addr= htonl(INADDR_ANY);//??????????
  addrSrv.sin_family = AF_INET;
  addrSrv.sin_port=htons(5000);//>1024
 
  bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
 
  //监听模式
  //int listen(SOCKET s,int backlog);
  //等待连接队列最大值设置5
  listen(sockSrv,5);
  SOCKADDR_IN addrClient;
  int len= sizeof(SOCKADDR);//地址结构体长度,要赋初始值
  while (1)
  {
    //SOCKET accept(SOCKET s,struct sockAddr FAR *addr,int FAR* addrlen);
    //struct sockAddr FAR *addr保存客户端的ip和端口信息
    SOCKET sockConn = accept( sockSrv, (SOCKADDR*)&addrClient, &len);
    char sendBuf[100];
    sprintf( sendBuf,"Welcome to qiang ge !",inet_ntoa(addrClient.sin_addr));
    send( sockConn,sendBuf,strlen(sendBuf)+1, 0 );
    char recvBuf[100];
    recv( sockConn, recvBuf, 100, 0);
    printf("%s\n",recvBuf);
    closesocket(sockConn);
  }
}
 
 
 
客户端::::::::::::::
 
#include <winsock2.h>
#include <stdio.h>
void main()
{
  //加载套接字库,版本协商
  WORD wVersionRequired;
  WSADATA wsaData;
  int err;
 
  //请求库
  //WSAStartup( WORD wVersionRequired, WSADATA lpWSAData );
  wVersionRequired = MAKEWORD(1,1);
  err = WSAStartup( wVersionRequired, &wsaData );
 
  if ( err !=0 )
  {
    //不等于0就退出
    return;
  }
 
  //高字节和低字节都不为1
  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(5000);
  connect( sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
  char recvBuf[100];
  recv( sockClient,recvBuf,100,0 );
  printf("%s\n",recvBuf);
  send(sockClient,"this is qiang ge", strlen("this is qiang ge")+1,0);
  closesocket(sockClient);
  WSACleanup();
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值