资源简介
一个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个文件信息
- 上一篇:SiamFC++.pptx
- 下一篇:数据结构C++语言进出堆栈动画
相关资源
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- socket客户端.c
- socket服务端.c
- FTP客户端源码(c++)
评论
共有 条评论