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

2023-03-03 19:30:32 浏览数 (1)

浏览量 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("%sn",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: %sn", 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;
}

0 人点赞