資源簡介
基于非阻塞套接字的一個遠程計算器。功能很小,但是涉及到的多線程管理可以參考

代碼片段和文件信息
#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
評論
共有 條評論