资源简介
一个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++语言进出堆栈动画
相关资源
- 数据结构C++语言进出堆栈动画
- SiamFC++.pptx
- C++ Primer139296
- 14_车牌识别系统.zip
- 13_车型识别系统.zip
- 数据库课程设计 汽车租借信息系统
- C++学生信息管理系统源码+数据库+文档
- 电梯仿真系统 c++
- VC++定义一只红色画笔,绘制一个等边
- 魔法学院的奇幻之旅:用 GoC 编程绘图
- VC++编写的简单邮件客户端
- 《Visual C++ 编程词典》附带光盘资料
- 仓库管理系统(SQL+VC++6.0)
- C++飞鸽源代码、飞鸽传书源码详解、
- libstdc++.so.6.0.20下载138485
- 由浅入深学C++基础进阶与必做300题 源
- 组态软件设计与开发源代码.rar
- c源码与c++各种小程序源码
- 完整的C++文字游戏
- Parasoft C++ test 9.2官方用户手册_eclips
- C++面试题库(经验总结)
- C++ Primer Plus英文版第六版.pdf
- 3DES加密算法 C++实现
- c++ builder OPC通讯 源代码
- VC++实现的计算器,用MFC实现界面操作
- VS2008环境下C++实现Dijkstra算法,查找有
- 网络协议分析器的设计与实现
- c++数据结构 算法模板
- VC++2010 Express计算机二级考试所用编译
- Visual C++数字图像处理谢凤英版源代码
评论
共有 条评论