⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.cpp

📁 这是一个计算机网络的实验--实现的是聊天系统
💻 CPP
字号:
#include<string.h>
#include<stdio.h>
#include <iostream.h>
#include<winsock.h>
#pragma comment(lib,"wsock32.lib")
void main()
{
	WORD wVersionRequested;		//存版本号用的
	WSADATA wsaData;			// ADATA的类型 用于实现细节 


	int err;			

//WinSock以DLL的形式提供,在调用任何WinSock API之前,必须调用函数WSAStartup进行初始化
	wVersionRequested=MAKEWORD(1,1);//版本号
	err=WSAStartup(wVersionRequested,&wsaData);
   if (err!=0)					///判断 winsoket是否初化成功
	{
		cout<<"初始化失败"<<endl;
		err=WSACleanup();
		return;
	}
   else
	cout<<"初始化成功"<<endl;

	
	//启动socket通过SOCKET socket( int af, int type, int protocol)函数;
	SOCKET	sockSrv=socket(AF_INET,SOCK_STREAM,0);
	
	//以下开始Bind
	//其中htons函数负责将主机unsigned short 类型的数据转换成网络上的unsigned short 类型的数据

	sockaddr_in addrSrv;		
	addrSrv.sin_family=	AF_INET;	
	addrSrv.sin_port=htons(3624);				//使用3624端口
	addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);	//INADDR_ANY,则套接字将被绑定到默认的IP地址
	//bind() 将一本地地址与一个SOCKET描述字捆绑在一起
	bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));		
	listen(sockSrv,5); 

	SOCKADDR_IN addrClient;		///客户机
	int len =sizeof(SOCKADDR);
//recvfrom() 接收一个数据报并保存源地址。
	while(1)//保证服务器一直处在惊醒状态
	{

		SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); 
		//接受客户端 接受端口 


       //char sendBuf[100];接受缓冲区的长度
		char sendBuf[100]="与服务器连接成功";
		sendto(sockConn,sendBuf,100,0,(SOCKADDR*)&addrClient,len);
		char recvBuf[100];//接受缓冲区的长度
		recvfrom(sockConn,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
		cout<<recvBuf<<endl;
		cout<<"请等待客户机的请求...."<<endl;
		recvfrom(sockConn,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
		cout<<recvBuf<<endl;
     	cout<<"输入你的回复"<<endl;
		cin>>sendBuf;
		sendto(sockConn,sendBuf,100,0,(SOCKADDR*)&addrClient,len);
		cout<<"您的回复发送成功....."<<endl;
		cout<<"请等待客户机是否要继续...."<<endl;
		recvfrom(sockConn,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);///确认是否继续通信
		while(recvBuf[0]=='y')
		{
		
			cout<<"请等待客户机发消息....."<<endl;
			recvfrom(sockConn,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);///接收数据
			cout<<recvBuf<<endl;
			cout<<"输入你的回复"<<endl;
			cin>>sendBuf;
			sendto(sockConn,sendBuf,100,0,(SOCKADDR*)&addrClient,len);
			cout<<"您的回复发送成功....."<<endl;
			cout<<"请等待客户机是否要继续...."<<endl;
			recvfrom(sockConn,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);///确认是否继续通信

		}
		if(recvBuf[0]!='y')
		{
			cout<<"客户机断开"<<endl;
		}

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -