• 大小: 1.43MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-15
  • 语言: C/C++
  • 标签: c++  socke  多客户端  

资源简介

一个socket对应多个client,每个socket开启一个新的线程。可直接使用。

资源截图

代码片段和文件信息

#include “client.h“
#include 
struct _INI
{
  TCHAR ServerIP[256];
int ServerPort;
 
}X;

//变量
SOCKET sClient; //套接字
HANDLE hThreadSend; //发送数据线程
HANDLE hThreadRecv; //接收数据线程
char    bufSend[MAX_NUM_BUF]; //发送数据缓冲区
BOOL    bSend = FALSE;                      //发送标记位
BOOL bConnecting; //与服务器的连接状态
HANDLE arrThread[2]; //子线程数组
CRITICAL_SECTION cs; //临界区对象,锁定bufSend

/**
 * 初始化
 */
BOOL InitClient(void)
{
//初始化全局变量
InitMember();

//创建SOCKET
if (!InitSockt())
{
return FALSE;
}

return TRUE;
}
/**
 * 初始化全局变量
 */
void InitMember(void)
{
InitializeCriticalSection(&cs);

sClient = INVALID_SOCKET; //套接字
    hThreadRecv = NULL; //接收数据线程句柄
hThreadSend = NULL; //发送数据线程句柄
bConnecting = FALSE; //为连接状态

    //初始化数据缓冲区
memset(bufSend 0 MAX_NUM_BUF);
memset(arrThread 0 2);
}

/**
 * 创建非阻塞套接字
 */
BOOL  InitSockt(void)
{
int reVal; //返回值
WSADATA wsData; //WSADATA变量
reVal = WSAStartup(MAKEWORD(22)&wsData);//初始化Windows Sockets Dll

//创建套接字
sClient = socket(AF_INET SOCK_STREAM 0);
if(INVALID_SOCKET == sClient)
return FALSE;


//设置套接字非阻塞模式
unsigned long ul = 1;
reVal = ioctlsocket(sClient FIONBIO (unsigned long*)&ul);
if (reVal == SOCKET_ERROR)
return FALSE;

return TRUE;
}

BOOL ReadConfig()
{
TCHAR IniPath[256] = {0};
//CString strInfo = NULL;
GetModuleFileName(NULLIniPath256);
INT32 len = strlen(IniPath);
INT32 nTemp = 0;
TCHAR tempBuf[256] = {0};
IniPath[len - 3] = ‘i‘;
IniPath[len - 2] = ‘n‘;
IniPath[len - 1] = ‘i‘;
 
  GetPrivateProfileString(“SET“ “ServerIP“ ““ X.ServerIP _countof(X.ServerIP)IniPath);
X.ServerPort = GetPrivateProfileInt(“SET““ServerPort“1000IniPath);
  return TRUE;
}
/**
 * 连接服务器
 */
BOOL ConnectServer(void)
{
ReadConfig();
int reVal; //返回值
sockaddr_in serAddr;//服务器地址
//输入要连接的主机地址
    serAddr.sin_family = AF_INET;
   // serAddr.sin_port = htons(SERVERPORT);
serAddr.sin_port = htons(X.ServerPort);
   // serAddr.sin_addr.S_un.S_addr = inet_addr(SERVERIP);addrSrv.sin_addr.S_un.S_addr=inet_addr(( char *)X.HostPC_IP);
serAddr.sin_addr.S_un.S_addr = inet_addr(( char *)X.ServerIP);
while(true)
{
//连接服务器
reVal = connect(sClient (struct sockaddr*)&serAddr sizeof(serAddr));
//处理连接错误
if(SOCKET_ERROR == reVal)
{
int nErrCode = WSAGetLastError();
if( WSAEWOULDBLOCK == nErrCode || WSAEINVAL == nErrCode)    //连接还没有完成
{
continue;
}
else if (WSAEISCONN == nErrCode)//连接已经完成
{
break;
}
else//其它原因,连接失败
{
printf(“\nerror=%ld“nErrCode);
// return FALSE;
}
}

if ( reVal == 0 )//连接成功
break;
}

bConnecting = TRUE;

return TRUE;
}
/**
 * 创建发送和接收数据线程
 */
BOOL CreateSendAndRecvThread(void)
{
//创建接收数据的线程
unsigned long ulThreadId;
hThreadRecv = CreateThread(NULL 0 RecvDataThread NULL 0 &ulThreadId);
if (NULL == hThreadRecv)
return FALSE;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     251392  2018-05-03 13:46  client\Release\socket_client.exe

     文件         75  2018-05-07 09:57  client\Release\socket_client.ini

     文件       6618  2018-05-03 10:43  client\socket_client\client.cpp

     文件       1025  2018-05-03 13:46  client\socket_client\client.h

     文件       1692  2018-04-23 08:47  client\socket_client\ReadMe.txt

     文件        396  2018-04-23 08:47  client\socket_client\Resource.h

     文件       1020  2018-04-26 09:46  client\socket_client\socket_client.cpp

     文件         39  2018-04-23 08:47  client\socket_client\socket_client.h

     文件       1373  2018-04-23 08:47  client\socket_client\socket_client.rc

     文件       4850  2018-04-26 08:58  client\socket_client\socket_client.vcproj

     文件        218  2018-04-23 08:47  client\socket_client\stdafx.cpp

     文件        813  2018-04-23 08:47  client\socket_client\stdafx.h

     文件       1026  2018-04-23 08:47  client\socket_client\targetver.h

     文件        905  2018-04-23 08:47  client\socket_client.sln

    ..A..H.     35328  2018-05-03 10:39  client\socket_client.suo

     文件     270336  2018-05-16 08:43  server\Release\Socket_Server.exe

     文件         75  2018-04-26 10:10  server\Release\Socket_Server.ini

     文件    6220800  2018-05-16 08:43  server\Release\Socket_Server.pdb

     文件       1692  2018-04-23 08:42  server\Socket_Server\ReadMe.txt

     文件        396  2018-04-23 08:42  server\Socket_Server\Resource.h

     文件       4085  2018-04-26 14:48  server\Socket_Server\sclient.cpp

     文件       1834  2018-04-23 08:45  server\Socket_Server\sclient.h

     文件      15422  2018-05-16 08:42  server\Socket_Server\server.cpp

     文件       2542  2018-05-02 10:46  server\Socket_Server\server.h

     文件       1399  2018-05-04 18:01  server\Socket_Server\Socket_Server.cpp

     文件         39  2018-04-23 08:42  server\Socket_Server\Socket_Server.h

     文件       1373  2018-04-23 08:42  server\Socket_Server\Socket_Server.rc

     文件       4913  2018-05-16 08:28  server\Socket_Server\Socket_Server.vcproj

     文件        218  2018-04-23 08:42  server\Socket_Server\stdafx.cpp

     文件        813  2018-04-23 08:42  server\Socket_Server\stdafx.h

............此处省略12个文件信息

评论

共有 条评论