资源简介
基于非阻塞套接字的一个远程计算器。功能很小,但是涉及到的多线程管理可以参考
代码片段和文件信息
#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
- 上一篇:t-s模糊神经网络程序
- 下一篇:兰勃特墨卡托投影.rar
相关资源
- Qt 使用多线程QThread实现进度条
- 超牛的多线程扫描网站后台
- e语言-利用易语言多线程支持库实现多
- Qt多线程资料
- 多线程map容器互斥代码
- linux下多线程socket通信完整源码文件
- 使用pbni封装oci方便pb直接传递句柄使
- 易语言多线程版中控
- 用多线程同步方法解决生产者-消费者
- socket,多线程实现群聊
- qtconcurrent 多线程并发处理
- QT 多线程TCP服务器与客户端
- springMVC+多线程+kafka的 demo基于maven
- Linux下的多线程编程.pdf
- 多线程实现双向链表增删改
- 易语言源码易语言多线程高级控制源
- Delphi多线程实现文件拷贝
- 指定地区代理IP获取并多线程校验项目
- Socket多线程.rar
- 豆瓣图书TOP250多线程爬虫代码
- 多线程UDP接收数据并存储
- tcl入门教程(包括常用的socket多线程
- 多线程网段端口扫描器
- 多线程矩阵乘法
- 用多线程同步方法解决哲学家就餐问
- 字符串高级查找替换器delphi源代码
- 多线程文件搜索专家(delphi源码)
- 多串口数据采集.zip
- 多线程与单线程的对比采用CreateThre
- tcp client简单 连接,发送接收断开,多
评论
共有 条评论