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

📄 lientrequest.cpp

📁 用面向连接的TCP实现学生信息的管理
💻 CPP
字号:
// lientRequest.cpp: implementation of the ClientRequest class.
//
//////////////////////////////////////////////////////////////////////

#include "lientRequest.h"
#include "StudentTable.h"
#include <Winsock2.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

ClientRequest::ClientRequest()
{
	
	loadStudentTable();
	displayRecords();
	start();
}

void ClientRequest::loadStudentTable()
{
	StudentTable::loadFile();
}

ClientRequest::~ClientRequest()
{
	

}
void ClientRequest::start()
{
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
	
	wVersionRequested = MAKEWORD(2,2);
	
	err = WSAStartup( wVersionRequested, &wsaData );
	if (err!=0) 
	{
		return;
	}
	if (LOBYTE(wsaData.wVersion)!=2||
        HIBYTE(wsaData.wVersion)!=2) 
	{
		WSACleanup( );
		return; 
	}
	SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
	SOCKADDR_IN addrSrv;
	addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
	addrSrv.sin_family=AF_INET;
	addrSrv.sin_port=htons(6000);

	bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
	listen(sockSrv,5);
	SOCKADDR_IN addrClient;
	int len=sizeof(SOCKADDR);

	while(1)
	{
		SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
		char sendBuf[100];
		//sprintf(sendBuf,"Welcome %s to my home!",inet_ntoa(addrClient.sin_addr));
		//send(sockConn,sendBuf,strlen(sendBuf)+1,0);
		char recvBuf[100];
		recv(sockConn,recvBuf,100,0);
		if(recvBuf[0]=='q'||recvBuf[0]=='Q')
		{
			sprintf(sendBuf,"disconnect client!");
			send(sockConn,sendBuf,strlen(sendBuf)+1,0);
			closesocket(sockConn);
		}
		else
		{
			char *token;
			char *stud[2];
			char seps[]= " ,\t\n";
			
			token = strtok(recvBuf, seps );
			
			for(int i=0;i<2 && token != NULL;i++)
			{
				stud[i]=token;
				token= strtok( NULL, seps );
			}
			switch(stud[0][0])
			{
			case 'F':
				{
					string sendstr=queryRecord(stud[1]);
					int length=sendstr.length();
					char *buffer=new char[length+1];
					for(int i=0;i<length;i++)
					{
						buffer[i]=sendstr[i];
					}
					buffer[length]='\0';
					send(sockConn,buffer,length+1,0);
					break;
				}
				//可以在后面加上插入和删除情况
			default:break;
			}
		}

		//printf("%s\n",recvBuf);
		
	}
}
void ClientRequest::displayRecords()                  //显示记录
{
	StudentTable::displayRecord();
}
string ClientRequest::queryRecord(string sno)                      //查询记录
{
	return StudentTable::queryRecord(sno);
}
void ClientRequest::addRecord()                         //添加记录
{
}
void ClientRequest::removeRecord()                   //删除记录
{
}

⌨️ 快捷键说明

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