优秀的毕业设计论文网
计算机 JAVA 电子信息 单片机 机械机电 模具 土木工程 建筑结构 论文
热门搜索词:网络 ASP.NET 汽车 电气 数控 PLC

VC428 网上寻呼QICQ

以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
  
资料介绍:

在网络无所不在的今天,在Internet上,有icq,oicq,ticq等网上寻呼软件,极大程度上方便了处于在世界各地的友人之间的相互联系,也使世界好象一下子缩小了,不管你在哪里,只要你上了网,打开这些软件,就可以给你的朋友发信息,不管对方是否也同时在线,只要知道他有号码。

本文来自think58

[资料来源:http://www.THINK58.com]

[资料来源:www.THINK58.com]

现在,企业、机关、学校都建立起了自己的局域网,在局域网,虽然可以通过文件共享的方式进行通讯,但单单使用这种方式,是非常不方便的,首先,在局域网里的网上邻居里,只能看到机器名,不清楚对方是谁,也不知道对方机器里有什么资源可以共享,而且,当局域网的机器很多时,这种方式更加麻烦。于是,就想到做一个在局域网里的icq,在局域网里,我们可以通过它,实现在局域网里方便的联络,进行文件传输,消息的发布,自己共享内容的简介等。在学校建立起校园网里,这软件可以起到方便同学之间,教师之间,师生之间的相互联络,这样,不用上Internet,可以节省资源,在学校这个大环境里,就可以同学之间联系,联络感情,促进同学之间的友谊,学生可以通过它来与不同寝室的同学,教师讨论问题。并能最大限度地利用现有的网络资源,极大地提高工作效率。为了适应校园网的建设,实现校园网内进行消息发布,学生交流,师生交流,网上作业等功能。 本文来自think58

[资料来源:www.THINK58.com]

传统的软件工程方法有生命周期方法和快速原型法。
面向对象方法学是一种全新的软件工程方法,其出发点和基本原则是尽可能模拟人类习惯的思维方式,把构成客观世界的实体抽象为对象。概括地说,面向对象方法学有四个要点:
1.认为客观世界是由各种对象组成的,复杂的对象可以由比较简单的对象以某种方式组合而成;
2.把所有对象都划分成各种对象类,每个对象类可以定义一组数据和方法;
3.按照子类和父类的关系,把若干对象类组成一个层次结构的系统;
4.对象彼此之间仅能通过传递消息互相联系。
用面向对象方法学开发的软件有以下优点:

[来源:http://think58.com]

TCP/IP是国际互联网所采用进行网际互连的通信协议。实际所称的TCP/IP协议包括了在国际互联网上应用的一组协议,互联网协议族是此协议族的另一个名字。这个协议族包括几种工作在不同层次上的网络协议,IP互连协议(Internet Protocol),负责主机之间的传输数据。TCP传输控制协议(Transmission Control Protocol),负责在应用程序之间传递数据。UDP用户数据报协议(User Datagram Protocol),提供给用户进程的无连接协议,也负责在应用程序之间无连接传递数据,但不执行正确性检查。ICMP互连网控制报文协议(Internet Control Message Protocol),处理主机间的差错和传送控制。ARP地址解析协议(Address Resolution Protocol),负责将网络层地址转换成链路层地址。RARP反向地址解析协议(Reverse Address Resolution Protocol),负责将链路层地址转换成网络层地址。 think58好,好think58

[来源:http://www.think58.com]

TCP/IP协议的核心是传输层协议(TCP、UDP)、网络层协议(IP)和物理接口层,这三层通常在操作系统的内核中实现。TCP/IP网络环境下的应用程序设计是通过网络系统编程界面Socket实现的,Socket提供应用程序与系统内核之间的网络编程接口。协议可以是可靠的可以是不可靠的。可靠的协议意味着当数据通过协议传递时,协议保证数据正确传输。可靠传输包括几个特征。首先,为了确保数据正确传送,协议在通信应用程序之间互相交换确认信息。也就是说,程序每次发送-个报文时,都期望对方发送一个相当于说:“我得到这个报文”的确认信息。如果发送程序没有收到这样一个确认信息,程序将自动重新发送此报文,直到得到应答信息为止。其次,为了确保传输的数据有效,可靠协议在每次传输时,都包含一个或更多的校验和(CRC)。接收计算机重新计算校验和,与收到的校验和进行比较。如果不匹配,就表明在传输过程中发生了错误。

[资料来源:http://www.THINK58.com]


可由用户来确定
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);  
//数据函数,这个函数适合在线程里发送数据函数,而服务器的响应都是在工人线程里完成的,所以,很适合服务器的发送数据。成功返回真,不成功返回假
 CServerSocket();
 virtual ~CServerSocket();
private:
 CRecvSocket* m_apRecvSocket[ListenSocketNum];   侦听Socket的指针数组
 CSendSocket* m_apSendSocket[SendSocketNum];    发送Socket的指针数组
 int m_nRecvSocket;                       侦听Socket的个数
 int m_nSendSocket;                       发送Socket的个数 内容来自think58 [资料来源:http://www.THINK58.com]
 BOOL m_abBusy[SendSocketNum];         标志每个发送Socket是否处于忙的状态
 BYTE m_arBuf[CheckBufLength];  检查发送数据发回的确认的缓冲数组
 DWORD m_nTotalSend;        保存从CserverSocket建立后,发送了多少次数据
 DWORD m_nTimeOut;                   发送数据的超时时间
}; think58.com [资料来源:http://www.THINK58.com]


§4.7客户端的底层通讯类的设计 think58好,好think58

[资料来源:http://THINK58.com]

    与客户端上层的接口是CClientSocket类,它隐藏了服务器底层通讯的细节及多线程发送数据的问题,提供给上一层一个统一的接口,CClientSocket类的使用,是先建立一个它的实例,再调用成员函数Create()传入必要的参数,发送数据时,就调用其成员函数SendData,或SendDataInThread处理发送数据,在CRecvSocket类的OnReceive里处理,向父窗口发送一个WM_RECIEVE_MSG消息,并把接受到的数据作为参数传递给父窗口。两个函数的适应情况,SendData函数,适用于需要直接发送数据的场合,不需要回应。如果在线程里执行,则可由其返回值确定发送成功与否。而SendDataInThread是建立一个线程,在线程里调用SendData函数进行发送数据,通过向指定接受窗口发送消息来确定是否成功。 copyright think58 [资料来源:http://THINK58.com]

算法描述:
发送一个数据,需要等待响应信息的回来,如果在规定时间内,还没有收到确认信息,则认为发送数据丢失,将重试FailReDoTime次,如果还是没有确认信息发送回来,则返回发送失败,否则,返回发送成功。
因为客户端可以多线程的发送数据,有一个请求,就建立一个线程进行处理。我为每个发送socket设置一个是否忙的标志busy,当需要发送数据时,就选择一个空闲的sendsocket,设置为忙,然后发送数据,再设置回空闲,然后等待确认信息的回来。

[资料来源:http://think58.com]

SendData函数的实现算法,与服务器端是基本一样的原理,通过设置一个缓冲区长度为N,然后,为每一次数据进行统计,发一次,就加1,然后把发送数据中的This=count%N,且把缓冲区中第This个成员设为0,在发送端,就要数组中的第This个成员是否为1即可,在接受到的确认信息中,取出This项,再为缓冲区中第This项设为1,这样就可以快速且可靠的判断发送数据是否得到响应回来了。
   
因为在客户端,大部分数据,是在某个消息处理函数中执行的,所以,适用于服务器的SendData发送数据函数,在客户端,若是在消息处理函数中发送,函数返回值,将永远为FALSE,于是就添加了一个SendDataInThread函数,把发送数据的过程放在线程里执行,通过发消息的手段,来返回结果。在SendDataInThread函数中,调用SendData函数进行发送数据。

copyright think58

[资料来源:www.THINK58.com]

[资料来源:http://think58.com]

客户端通讯类的结构:
class CClientSocket : public CAsyncSocket
{
public:
 CClientSocket();
 virtual ~CClientSocket();
 void SendDataInThread(CData* pData,CWnd*pWnd);
// 在线程里发送数据,成功,或失败都会向指定窗口类发送一个WM_SENDINTHREAD_RES 的消息,参数WPARAM为发送数据的指针,参数LPARAM为1,则表示发送成功,0则表示发送失败
 BOOL Create(int TimeOut=TimeWaitForRes);  //建立SOCKET
 BOOL SendData(CData* pData,int FailReDoTimes=3);
//发送数据成员函数,失败重试指定的FailReDoTimes次,成功返回真
 CWnd* GetOwner(){return m_pWnd;};
//得到接受发来数据的处理窗口指针
 void SetOwner(CWnd* pWnd){m_pWnd=pWnd;};
//设置接受发来数据的处理窗口指针
 virtual void OnReceive(int nErrorCode);处理FD_READ网络事件
private:
 CWnd* m_pWnd;  //接受发来数据的处理窗口指针
 char m_szResponseMsg[MaxResponseMsgLength];
 int m_szrLength;
 BOOL m_bBusy;  //是否处理忙状态
 BYTE m_arBuf[CheckBufLength];//检查确认信息的缓冲数组 think58.com

[来源:http://www.think58.com]


 DWORD m_nTotalSend; //从启动到现在为此,发送的数据总数
 DWORD m_nTimeOut;  //发送数据的超时时间
};

copyright think58 [版权所有:http://think58.com]

[来源:http://think58.com]