• 大小: 34KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: 其他
  • 标签: 多线程  

资源简介

基于非阻塞套接字的一个远程计算器。功能很小,但是涉及到的多线程管理可以参考

资源截图

代码片段和文件信息

#include
using namespace std;

#include “MyDef.h“
#include 

#pragma comment(lib “ws2_32.lib“)

#define TIMEFORTHREADWAIT 500

HANDLE hThreadSend; //发送数据线程
HANDLE hThreadRecv; //接收数据线程
SOCKET sSocket; //客户端套接字
BOOL   bConning; //客户端状态 各个线程实时检测以便退出
CRITICAL_SECTION csSendBuf; //互斥访问csSendBuf
CRITICAL_SECTION csRecvBuf; //互斥访问csRecvBuf
DATABUF SendBuf;                        //存放客户端输入经过验证打包后的数据
DATABUF RecvBuf; //存放从服务器的数据
HANDLE hEventForSendData; //在主线程处理验证完输入信息后 通知发送线程
HANDLE hEventForShowData; //接收数据接收到数据拷贝至RecvBuf 通知主线程显示
HANDLE hThread[2]; //用于主线程检测接受和发送线程是否均已退出

void ShowConnMsg(BOOL bSuc); //用于显示是否成功连接至服务器
BOOL InitSocket(); //初始化套接字
void InitMember(); //初始化全局变量
BOOL InitClient(); //初始化客户端(即初始化全局变量和套接字)
void ShowInitMsg(BOOL bSuc); //用于显示是否成功初始化套接字
void ShowTipMsg(); //用于显示提示输入信息
BOOL ConnectServer(); //连接至服务器
BOOL CreateSendAndRecvThread(); //创建发送和接收线程
void ExitClient(); //退出客户端
void InputAndOutput(); //执行输入输出(主线程)
void ShowDataResultMsg(); //执行显示RecvBuf数据
BOOL PackByebye(const char* pExpre); //对消息ByeBye打包
BOOL Packexpression(const char* pExpre);//对经过验证的表达式打包
DWORD _stdcall SendThread(void* lParam);//发送线程
DWORD _stdcall RecvThread(void* lParam);//接收线程


int main()
{
if(InitClient())
ShowInitMsg(TRUE); //初始化成功
else
{
ShowInitMsg(FALSE); //初始化失败 退出
ExitClient();
return -1;
}

if (!ConnectServer()) //连接至服务器
{
ShowConnMsg(FALSE); //连接失败  退出
ExitClient();
return -1;
}
else
ShowConnMsg(TRUE); //连接成功

if(!CreateSendAndRecvThread()) //创建发送和接收线程  开始运行
{
ExitClient(); //创建失败  退出
return -1;
}

InputAndOutput(); //执行输入输出(并对输入和输出结果进行打包和验证等)

ExitClient(); //InputAndOutput退出  退出客户端

return 0;
}

void ShowConnMsg(BOOL bSuc)
{
if (bSuc)
{
cout< cout<<“----------------------------------“< cout<<“-------已成功连接至服务器---------“< cout<<“----------------------------------“< }
else
{
cout< cout<<“----------------------------------“< cout<<“---------连接服务器失败!---------“< cout<<“----------客户端即将退出----------“< cout<<“----------------------------------“< }
}

void ShowInitMsg(BOOL bSuc)
{
if (bSuc)
{
cout<<“----------------------------------“< cout<<“--------客户端初始化完成----------“< cout<<“---------正在连接服务器...--------“< cout<<“----------------------------------“< }
else
{
cout<<“----------------------------------“< cout<<“----------客户端初始化失败!-------“< cout<<“------------客户端已退出----------“< cout<<“----------------------------------“< }
}

void InitMember()
//初始化全局变量
{
hThreadRecv=NULL;
hThreadSend=NULL;
sSocket    =INVALID_SOCKET;
bConning = FALSE;
InitializeCriticalSection(&csSendBuf);
InitializeCriticalSecti

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-11-01 10:28  非阻塞套接字多线程实例\
     目录           0  2012-11-01 10:28  非阻塞套接字多线程实例\Client\
     文件       11413  2012-10-17 22:33  非阻塞套接字多线程实例\Client\Client.cpp
     文件        4344  2012-10-15 23:42  非阻塞套接字多线程实例\Client\Client.dsp
     文件         537  2012-10-15 22:02  非阻塞套接字多线程实例\Client\Client.dsw
     文件       50176  2012-10-18 00:40  非阻塞套接字多线程实例\Client\Client.ncb
     文件       48640  2012-10-18 00:40  非阻塞套接字多线程实例\Client\Client.opt
     文件         248  2012-10-18 00:39  非阻塞套接字多线程实例\Client\Client.plg
     文件         304  2012-10-17 18:18  非阻塞套接字多线程实例\Client\MyDef.h
     目录           0  2012-11-01 10:28  非阻塞套接字多线程实例\Server\
     文件        4723  2012-10-17 23:59  非阻塞套接字多线程实例\Server\Client.cpp
     文件        1348  2012-10-17 09:57  非阻塞套接字多线程实例\Server\Client.h
     文件         240  2012-10-15 22:59  非阻塞套接字多线程实例\Server\MyDef.h
     文件        8684  2012-10-17 18:10  非阻塞套接字多线程实例\Server\Server.cpp
     文件        4462  2012-10-15 23:01  非阻塞套接字多线程实例\Server\Server.dsp
     文件         537  2012-10-11 20:53  非阻塞套接字多线程实例\Server\Server.dsw
     文件       58368  2012-10-18 00:40  非阻塞套接字多线程实例\Server\Server.ncb
     文件       49664  2012-10-18 00:40  非阻塞套接字多线程实例\Server\Server.opt
     文件         246  2012-10-18 00:39  非阻塞套接字多线程实例\Server\Server.plg
     文件         293  2007-10-15 15:10  非阻塞套接字多线程实例\Server\StdAfx.cpp
     文件         769  2007-10-15 16:23  非阻塞套接字多线程实例\Server\StdAfx.h

评论

共有 条评论