效果比较简陋,但是功能可以实现
效果:
服务器
#include <iostream>
#include <winsock2.h>//必须写在windows.h前面
#include <windows.h>
#pragma comment(lib,"ws2_32.lib")
#define MAX_CLI 256
#define Max_Buf_Size 1024
SOCKET cliSocket[MAX_CLI];
int cliCount = 0;
HANDLE hMutex;
//打印错误
void ErrorHanding(const char* msg)
{
fputs(msg, stderr);
fputc('\n', stderr);
exit(1);
}
//发数据
void SendMsg(SOCKET currScoker, const char* msg)
{
WaitForSingleObject(hMutex, INFINITE);
for (int i = 0; i < cliCount; i++)
{
if (currScoker != cliSocket[i])
{
send(cliSocket[i], msg, strlen(msg), 0);
}
}
ReleaseMutex(hMutex);
}
//每个客户端单独线程管理
DWORD WINAPI Thread_Client(void* client)
{
SOCKET currCli = *(SOCKET*)client;
char recvBuf[Max_Buf_Size] = {
0 };
while (true)
{
int iLen = recv(currCli, recvBuf, Max_Buf_Size, 0);
if (iLen!=-1)
{
SendMsg(currCli,recvBuf);
}
else
{
break;
}
}
WaitForSingleObject(hMutex, INFINITE);
bool isdel = false;
for (int i =0;i<cliCount;i++)
{
if (cliSocket