// 系统添加网络连接的头文件引用及一些消息类型的宏定义:
#include
#include
#pragma comment(lib,"ws2_32.lib")
#define CLIENTSEND_EXIT 1
#define CLIENTSEND_TRAN 2
#define CLIENTSEND_LIST 3
#define SERVERSEND_SELFID 1
#define SERVERSEND_NEWUSR 2
#define SERVERSEND_SHOWMSG 3
#define SERVERSEND_ONLINE 4
FILE *ioutfileServer;
FILE *ioutfileClient;
struct CReceivePackage
{
int iType;
int iToID;
int IFromID;
char cBuffer[1024];
};
struct CSendPackage
{
int iType;
int iCurConn;
char cBuffer[1024];
};
struct CUserSocketInfo
{
int ID;
char cDstIP[64];
int iPort;
SOCKET sUserSocket;
};
struct CUser
{
int ID;
char cDstIP[64];
};
struct CUser usr[20];
int bSend 0;
int iMyself;
int iNew 0;
struct CUserSocketInfo usrinfo[20];
//退出函数
void ExitSystem()
{
if(ioutfileServer!NULL)
fclose(ioutfileServer);
if(ioutfileClient!NULL)
fclose(ioutfileClient);
WSACleanup();
exit(0);
}
//服务器端接收消息的线程
DWORD WINAPI threadproServer(LPVOID pParam)
{
SOCKET hsock (SOCKET)pParam;
char cRecvBuffer[1024];
char cShowBuffer[1024];
int num 0;
if(hsock! INVALID_SOCKET)
printf("start:\n");
while(1)
{
num recv(hsock,cRecvBuffer,1024,0);
if(num> 0)
{
cRecvBuffer[num] '\0';
sprintf(cShowBuffer,"to me:%s\n",cRecvBuffer);
printf("%s",cShowBuffer);
fwrite(cShowBuffer,sizeof(char),strlen(cShowBuffer),ioutfileServer);
fflush(ioutfileServer);
if(strcmp("exit",cRecvBuffer) 0)
{
ExitSystem();
}
}
}
return 0;
}
//检查IP
int CheckIP(char *cIP)
{
char IPAddress[128];
char IPNumber[4];
int iSubIP 0;
int iDot 0;
int iResult 0;
int iIPResult 1;
int i;
memset(IPNumber,0,4);
strncpy(IPAddress,cIP,128);
for(i 0;i<128;i++)
{
if(IPAddress[i] '.')
{
iDot++;
iSubIP 0;
if(atoi(IPNumber)>255)
iIPResult 0