免费获取|
论文天下网
  • 论文天下网 |
  • 原创毕业论文 |
  • 论文范文 |
  • 论文下载 |
  • 计算机论文 |
  • 论文降重 |
  • 毕业论文 |
  • 外文翻译 |
  • 免费论文 |
  • 开题报告 |
  • 心得体会 |

当前位置:论文天下网 -> 免费论文 -> 计算机论文

免费vc++网上寻呼QICQ源代码(附带论文)(八)

rrentMsg;   当前查看到的数据位置(索引)
 CTalkDlg* pTalk; //发送消息的对话框指针
 CLookDlg* pRecv; //查看消息的对话框指针
 CFriendDetailDlg* pFInfo; //查看详细资料对话框的指针
};

传给发送线程的参数数据结构:
struct sparam
{
 CData* pData; 需要发送的数据的指针
 CWnd*pWnd;   接受反馈消息的窗口
 CClientSocket* pSocket; 客户端socket的指针
};

全局函数申明:
UINT RequestFriendDetail(LPVOID param);
查询所有好友的详细信息是否完全,若没有详细信息,则以一定的时间间隔,向服务器发送没有详细信息的好友的请求信息。此工作线程函数,在上线或隐身后,N秒后将开始执行,然后每隔K秒就向服务器发送请求信息,在后台处理。原则是,把每个好友详细信息取回,又不影响前台用户的操作。
UINT SendThread(LPVOID param);
在线程里发送数据的函数


§4.6服务器端的底层通讯类的设计

 为了使能及时响应用户的请求,当用户很多时,仍然能够适应要求,我把侦听与发送数据的Socket分开,并分别都建立了多个实例,
也就是说,支持多个端口的侦听,发送数据使用的是多个端口,我只对侦听端口感兴趣,对发送数据的端口不感兴趣,因为,发送端口是多少都无所谓。

 CRecvSocket和CsendSocket都是从CAsyncSocket类里继承而来,分别处理侦听请求各发送数据,在CServerSocket类里,定义了几个CRecvSocket和CSendSocket对象的实例,通过CServerSocket类对内部进行组织和管理,提供给上层的接口是CServerSocket,它隐藏了服务器底层通讯的细节及多线程发送数据的问题,提供给上一层一个统一的接口,CServerSocket类的使用,是先建立一个它的实例,再调用成员函数Create(),传入必要的参数,发送数据时,就调用其成员函数SendData,处理接受数据,在CRecvSocket类的OnReceive里处理,调用了一个名为ProcessRecvData的线程函数,用户在这个线程函数里写上具体的处理代码

算法描述:

 发送一个数据,需要等待响应信息的回来,如果在规定时间内,还没有收到确认信息,则认为发送数据丢失,将重试FailReDoTime次,如果还是没有确认信息发送回来,则返回发送失败,否则,返回发送成功。
 
 因为服务器是多线程的发送数据,有一个请求,就建立一个线程进行处理。我为每个发送socket设置一个是否忙的标志busy,当需要发送数据时,就选择一个空闲的sendsocket,设置为忙,然后发送数据,再设置回空闲,然后等待确认信息的回来。
 
 SendData函数的实现算法,通过设置一个缓冲区长度为N,然后,为每一次数据进行统计,发一次,就加1,然后把发送数据中的This=count%N,且把缓冲区中第This个成员设为0,在发送端,就要数组中的第This个成员是否为1即可,在接受到的确认信息中,取出This项,再为缓冲区中第This项设为1,这样就可以快速且可靠的判断发送数据是否得到响应回来了。

侦听类结构:
class CRecvSocket : public CAsyncSocket
{
private:
 char m_szResponseMsg[MaxResponseMsgLength];     确认消息串
 int m_szrLength;                                 确认消息串的长度
public:
 CRecvSocket();
 virtual ~CRecvSocket();
public:
 BOOL Create(int nPort);             指定端口号,建立一个侦听Socket
 virtual void OnReceive(int nErrorCode);  处理接受数据
};

发送数据的socket类结构
class CSendSocket : public CAsyncSocket
{
private:
 BYTE* pBuf; 
//指向CServerSocket的m_arBuf缓冲区,处理发送后是否收到确认信息的缓冲区
 char m_szResponseMsg[20];
 int m_szrLength;
public:
 CSendSocket(BYTE*buf);
 virtual ~CSendSocket();
 BOOL Create();                     建立一个发送的socket
 virtual void OnReceive(int nErrorCode);  处理发送数据后接受到的确认消息
};

服务器的socket类
 这个通讯类的SendData,当发送数据失败时,可以重发几次,次数可由用户来确定
class CServerSocket 
{
public: 
 void Close();
 BOOL Create(int SendSockNum,CArray<DWORD,DWORD>&aPort,int TimeOut= TimeWaitForRes);
//建立侦听Socket和发送Socket,aPort是侦听端口数组,TimeOut是设置发送超时时间
 BOOL SendData(CData* pData,int FailReDoTimes=3);  
//数据函数,这个函数适合在线程里发送数据函数,而服务器的响应都是在工人线程里完成的,所以,很适合服务器的发送数据。成功返回真,不成功返

首页 上一页 5 6 7 8 9 10 11 下一页 尾页 8/17/17

相关论文
上一篇:免费vc++医药管理系统+论文 下一篇:免费vc中国象棋软件
推荐论文 本专业最新论文
Tags:免费 网上 寻呼 QICQ 源代码 附带 论文 【返回顶部】

相关栏目

自动化相关
计算机论文
工程管理论文
法律论文
医学论文
人力资源
电子专业
电气工程
英语论文
行政管理
电子商务
社科文学
教育论文
物流专业
金融专业
财务管理
会计专业
化学化工材料科学
电子通信
环境科学
经济类
机械模具类
报告,总结,申请书
其他专业论文


关于我们 | 联系方式 | 论文说明 | 网站地图 | 免费获取 | 钻石会员 | 原创毕业论文

 

论文天下网提供论文检测,论文降重,论文范文,论文排版,网站永久域名WWW.GEPUW.NET

本站部分文章来自网友投稿上传,如发现侵犯了您的版权,请联系指出,本站及时确认并删除  E-mail: 893628136@qq.com

Copyright@ 2009-2022 GEPUW.NET 论文天下网 版权所有