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

本文详细介绍了使用TCP/IP协议进行服务器与客户端通信的过程,包括加载套接字库、初始化、创建套接字、绑定地址、监听、接受连接、发送与接收消息等关键步骤。同时,通过客户端代码展示了如何与服务器建立连接、发送数据和接收响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务器端::::::::::
 
#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、付费专栏及课程。

余额充值