前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C-socket编程,实现客户端与服务端通信(服务端)

C-socket编程,实现客户端与服务端通信(服务端)

作者头像
kdyonly
发布2023-03-03 19:30:32
1K0
发布2023-03-03 19:30:32
举报
文章被收录于专栏:个人编程笔记

浏览量 3

1.创建套接字socket();

2.地址,端口,监听设置。

3.接受连接请求accerpt();

4.发送数据send();

5.接受数据recv();

6.关闭closesocket();

代码语言:javascript
复制
#include<stdio.h>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")//去ws2_32.lib库查找
int main()
{
	WORD wVersionRequested; 
	WSADATA wsaData;//用来接收windows socket的结构信息的
	int err;
	wVersionRequested = MAKEWORD(1,1);//使用1.1版本的socket库
	err=WSAStartup(wVersionRequested,&wsaData);
	if(err!=0)
	{
		printf("error");
		return -1;//返回值为零的时候表示成功申请了WSAStartup
	}
	if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
	{
		//检查低字节与高字节是不是确定是1,确定我们所请求的版本
		//否则,调用WSACleanup()清除信息,结束函数
		//	printf("error");
		WSACleanup();
		return -1;
	}
	//创建套接字,返socket操作,建立流式回套接字号sockSrv
	SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
	//套接字socksrv与本地地址相连
	SOCKADDR_IN addrSrc;
	addrSrc.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
	//将inaddr_any转换为网络字节序,调用htonl(long型)或htons(int型)
	addrSrc.sin_family=AF_INET;//地址族
	addrSrc.sin_port=htons(6000);//端口
	bind(sockSrv,(SOCKADDR*)&addrSrc,sizeof(SOCKADDR));
	//将套接字设置为监听模式,listen()通知tcp服务器准备好接收连接
	listen(sockSrv,10);
	SOCKADDR_IN addrClient;
	int len=sizeof(SOCKADDR);
	//等待客户端的请求
	while(true)
	{
		//accept()接受连接,等待客户端连接
		// SOCKET accept(  SOCKET s,  struct sockaddr* addr,  int* addrlen);  
		// 第一个参数,接收一个处于监听状态下的套接字  
		// 第二个参数,sockaddr用于保存客户端地址的信息  
		// 第三个参数,用于指定这个地址的长度  
		// 返回的是向与这个监听状态下的套接字通信的套接字  
		SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
		//客户端与服务端进行通信
		// send(), 在套接字上发送数据  
		// int send( SOCKET s,  const char* buf,  int len,  int flags);  
		// 第一个参数,需要发送信息的套接字,  
		// 第二个参数,包含了需要被传送的数据,  
		// 第三个参数是buffer的数据长度,  
		// 第四个参数,一些传送参数的设置
		// recv(), 在套接字上接收数据  
		// int recv(  SOCKET s,  char* buf,  int len,  int flags);  
		// 第一个参数,建立连接后的套接字,  
		// 第二个参数,接收数据  
		// 第三个参数,接收数据的长度,  
		// 第四个参数,一些传送参数的设置  
		char sendBuf[100];//缓冲
		printf(sendBuf,"welcome to the server program,let's start talking...\n",inet_ntoa(addrClient.sin_addr));
		send(sockConn,sendBuf,strlen(sendBuf)+1,0);
		char recvBuf[100];
		recv(sockConn,recvBuf,100,0);
		printf("%s\n",recvBuf);
		char * sockConnName="Client";
		printf("可以聊聊");
		int n=5;
		while(n--)
		{
			printf("还剩%d次:\n",n+1);
			char recvBuf[100];  
            recv(sockConn, recvBuf, 100, 0);  
            printf("%s Says: %s\n", sockConnName, recvBuf);
			char talk[100];
			printf("Please enter what you want to say next(\"quit\"to exit):");
			gets(talk);
			send(sockConn,talk,strlen(talk)+1,0);
			printf("\n");
		}
		printf("end");
		closesocket(sockConn);//关闭
	}
	printf("\n");  
   // system("pause");  
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档