windows下的Socket通信示例一

客户端发送数据,服务器端接收数据

先运行server.exe,再运行client.exe

服务器端server.cpp

#include<stdio.h>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")//加载ws2_32.dll

int main()
{
	//初始化DLL
	WSADATA wsaData;
	WSAStartup(MAKEWORD(2,2),&wsaData); //协议版本为2.2
	//判断版本信号是否正确
	if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2)
	{
		printf("请求协议版本失败!\n");
		return -1;
	}

	//创建套接字
	SOCKET servSock = socket(PF_INET, SOCK_STREAM,IPPROTO_TCP);
	if(SOCKET_ERROR == servSock)
	{
		printf("创建socket失败\n");
		WSACleanup(); //清空版本协议
		return -2;
	}
	//绑定套接字
	sockaddr_in sockAddr;
	memset(&sockAddr, 0, sizeof(sockAddr)); //每个字节都用0填充
	sockAddr.sin_family = PF_INET;//使用IPv4地址
	sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); //IP地址
	sockAddr.sin_port=htons(10086);//端口
	int bd=bind(servSock,(SOCKADDR*)&sockAddr,sizeof(SOCKADDR));
	if(bd==-1)
	{
		printf("bind 失败\n");
		closesocket(servSock);
		WSACleanup();
		return -3;
	}


	//进入监听状态
	int lisn=listen(servSock,20);//20为监听队列的长度
	if(lisn==-1)
	{
		printf("listen 失败\n");
		closesocket(servSock);
		WSACleanup();
		return -4;
	}

	//接收客户端请求
	SOCKADDR clntAddr;
	int size=sizeof(SOCKADDR);
	SOCKET clntSock=accept(servSock,(SOCKADDR*)&clntAddr,&size);
	
	//接收客户端的数据
	char recvBuff[1024];
	while(1)
	{
		int r=recv(clntSock,recvBuff,1023,NULL);
		if(r>0)  //接收成功
		{
			recvBuff[r]='\0';
			printf("接收到的客户端数据:%s\n",recvBuff);
		}
	}

	return 0;
}

客户端client.cpp

#include<stdio.h>
#include<stdlib.h>
#include<winSock2.h>

#pragma comment(lib,"ws2_32.lib")


int main()
{
	
	//初始化DLL
	WSADATA wsaData;
	WSAStartup(MAKEWORD(2,2),&wsaData);
	
	//创建套接字
	SOCKET sock=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);

	//获取服务器的协议地址族
	sockaddr_in sockAddr;
	memset(&sockAddr,0,sizeof(sockAddr));
	sockAddr.sin_family=PF_INET;
	sockAddr.sin_addr.s_addr=inet_addr("127.0.0.1");
	sockAddr.sin_port=htons(10086);

	
	//连接服务器
	connect(sock,(SOCKADDR*)&sockAddr,sizeof(SOCKADDR));

	//通信
	char buff[1024];
	while(1)
	{
		memset(buff,0,1024);
		printf("请输入你要发送给服务器的信息:\n");
		scanf("%s",buff);
		send(sock,buff,strlen(buff),NULL);
	}

	return 0;
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值