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

📄 kailleraclient.cpp

📁 由本人编写的一个完成端口测试程序
💻 CPP
字号:
#define KAILLERA_DLL
#include "kailleraclient.h"

kailleraInfos Infos;
SOCKET hSocket;

DLLEXP kailleraInit()
{
 WSADATA wsaData;
 WORD version=MAKEWORD(2,0);
 int ret=WSAStartup(version,&wsaData);
 if(ret!=0)return 0;
 else return 1;
}
DLLEXP kailleraConnect(char * a_pIP,DWORD a_dwPort)//连接到服务器
{
 SOCKADDR_IN Addr;
 hSocket=socket(AF_INET, SOCK_STREAM, 0);
 if(hSocket==INVALID_SOCKET)return 0;
 Addr.sin_addr.S_un.S_addr=inet_addr(a_pIP);
 Addr.sin_family=AF_INET;
 Addr.sin_port=htons((unsigned short)a_dwPort);
 int ret=connect(hSocket,(LPSOCKADDR)&Addr,sizeof(Addr));
 if(ret==SOCKET_ERROR)return 0;
 else return 1;
}
DLLEXP kailleraUserLogin(int roomid,int tableid,char *playername)//登陆
{
 LoginInfo login;
 login.Desk=tableid;
 login.Room=roomid;
 strcpy(login.Name,playername);
 SendToServer(&(char&)login,sizeof(LoginInfo),GAME_STATE_LOGIN);
 GameMsg package;
 recv(hSocket,&(char&)package,sizeof(GameMsg),0);
 if(package.MsgType==SERVER_SUCCESS) return 1;
 else return 0;
}
DLLEXP kailleraCreateGame(char * gamename)//建立新游戏
{
 CreateInfo createinfo;
 strcpy(createinfo.GameName,gamename);
 SendToServer(&(char&)createinfo,sizeof(CreateInfo),GAME_STATE_CREATE);
 GameMsg package;
 recv(hSocket,&(char&)package,sizeof(GameMsg),0);
 if(package.MsgType==SERVER_SUCCESS) return 1;
 else return 0;
}
DWORD WINAPI Waitthread(LPVOID lpparam)//加入游戏后等待开始的线程
{
 GameMsg package;
 recv(hSocket,&(char&)package,sizeof(GameMsg),0);
 if(package.MsgType==SERVER_SUCCESS) 
 {StartInfo startinfo;
  ZeroMemory(&startinfo,sizeof(StartInfo));
  memcpy(&startinfo,&package.Buffer,package.Size);
  gameCallback  gCallBack=0;	
  gCallBack=Infos.gameCallback;
  (*gCallBack)(startinfo.GameName,startinfo.player,startinfo.numplayers);
  return 1;}
 else return 0;
}
DLLEXP kailleraJoinGame(char * gamename)//加入游戏
{
	JoinInfo joininfo;
	strcpy(joininfo.GameName,gamename);
    SendToServer(&(char&)joininfo,sizeof(JoinInfo),GAME_STATE_JOIN);
	GameMsg package;
    recv(hSocket,&(char&)package,sizeof(GameMsg),0);
	if(package.MsgType==SERVER_SUCCESS) 
	{/*recv(hSocket,&(char&)package,sizeof(GameMsg),0);
	 if(package.MsgType==SERVER_SUCCESS) 
	 {StartInfo startinfo;
	  ZeroMemory(&startinfo,sizeof(StartInfo));
	  memcpy(&startinfo,&package.Buffer,package.Size);
	  gameCallback  gCallBack=0;	
	  gCallBack=Infos.gameCallback;
	  (*gCallBack)(startinfo.GameName,startinfo.player,startinfo.numplayers);
		 return 1;}
	  else return 0;*/ //不用线程的代码,会阻塞
	DWORD dwthreadID;
	CreateThread(NULL,0,Waitthread,NULL,0,&dwthreadID);
	return 1;
	}
	else return 0;
}
DWORD WINAPI Startthread(LPVOID lpparam)
{	 
	 gameCallback  gCallBack=0;
	 gCallBack=Infos.gameCallback;
	 (*gCallBack)(Infos.gameName,1,2);
	return 1;	
}
DLLEXP kailleraStartGame()//主机发开始信息等待服务器开始信号
{   GameMsg package;
    StartInfo startinfo;
	ZeroMemory(&startinfo,sizeof(StartInfo));
	//startinfo.player=1;
	//startinfo.numplayers=2;
	//strcpy(startinfo.GameName,Infos.gameName);
    SendToServer(&(char&)startinfo,sizeof(StartInfo),GAME_STATE_START);	
	recv(hSocket,&(char&)package,sizeof(GameMsg),0);
	if(package.MsgType==SERVER_SUCCESS)
	{//memcpy(&startinfo,&package.Buffer,package.Size);	 
	 //gameCallback  gCallBack=0;
	 //gCallBack=Infos.gameCallback;
	 //(*gCallBack)(startinfo.GameName,startinfo.player,startinfo.numplayers);
	DWORD dwthreadID;
	CreateThread(NULL,0,Startthread,NULL,0,&dwthreadID);
	return 1;
	}
	else return 0;
}
DLLEXP kailleraShutdown()
{	
 if(WSACleanup()!=0)return 0;
 else return 1;
}
DLLEXP kailleraSetInfos(kailleraInfos *infos)
{
 Infos.appName=infos->appName;
 Infos.gameName=infos->gameName;
 Infos.gameCallback=infos->gameCallback;
 return 1;
}
DLLEXP kailleraModifyPlayValues(void *values, int size)//values:in/out
{
 MsgInfo msginfo;
 ZeroMemory(&msginfo,sizeof(MsgInfo));
 strcpy(msginfo.Msg,(char*)values);
 SendToServer(&(char&)msginfo,sizeof(MsgInfo),GAME_STATE_MSG);
 GameMsg package;
 recv(hSocket,&(char&)package,sizeof(GameMsg),0);
 if(package.MsgType==SERVER_SUCCESS)
 {
    ZeroMemory(&msginfo,sizeof(MsgInfo));
	strcpy(msginfo.Msg,package.Buffer);
	strcpy((char*)values,msginfo.Msg);
	return 1;
 }
 else return 0;
}
DLLEXP kailleraEndGame()
{
 EndInfo endinfo;
 ZeroMemory(&endinfo,sizeof(EndInfo));
 SendToServer(&(char&)endinfo,sizeof(EndInfo),GAME_STATE_EXIT); 
 closesocket(hSocket);
 hSocket=NULL;
 return 1;
}
DLLEXP kailleraUserLogOut()
{
 EndInfo endinfo;
 ZeroMemory(&endinfo,sizeof(EndInfo));
 SendToServer(&(char&)endinfo,sizeof(EndInfo),GAME_STATE_END);
 return 1;
}
int SendToServer(char *buf,int buflen,int nType)//发信息函数
{
	GameMsg *pNewPackage = (GameMsg*)new char[sizeof(GameMsg)];
	ZeroMemory(pNewPackage,sizeof(GameMsg));
	pNewPackage->MsgType=nType;
	memcpy(pNewPackage->Buffer,buf,buflen);
	pNewPackage->Size=buflen;
    send(hSocket,(char*)pNewPackage,sizeof(GameMsg),0);
	delete pNewPackage;
	return 1;
}

⌨️ 快捷键说明

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