1.重载CAsyncSocket 1 2 3 4 5 6 7 8 9 10 11 12 13 class CUDPSocket : public CAsyncSocket { public: CUDPSocket(); virtual ~CUDPSocket(); void SetParent(CDialog* pWnd); private: CDialog* m_pWnd; virtual void OnClose(int nErrorCode); virtual void OnReceive(int nErrorCode); ...
pThread 一>m hSocket=(SOCKET)soc.Detach();//开始执行新线程 pThread 一>ResumeThread();CAsyncSocket::OnAccept(nErrorCode);}//处理连接线程(即新线程)的1nitInstance 函数,BOO CSockThread::1nitInstance(){//把这个套接字句柄附加到新的套接字对象上,//这样主线程的通知函数就能发送到新线程中,在新线程...
CSocket派生于CAsyncSocket, 所有施诸于上的操作皆为同步操作。比如Connnect,Receive等。 同步操作的优点是简单易用,但缺点也显而易见,效率低下,因为你必须等到一个操作完成之后才能进行下一个操作。 如果你很关心效率,就应该优先使用CAsyncSocket。反之就用CSocket。 下面将说明如何用CSocket创建简单的服务器和客户端。
在VC + + 6. 0 中 ,我们可以用 Windows sockets API 来编写网络程序 ,其特点是十分灵活 ,可以充分利用众多的 Windows sockets API 函数 ,相比之下编程比较烦琐。另外我们可以使用MFC 封装的 CAsyncSocket 和 CSocket 两个类来进行网络编程 ,它把与套接字有关的 Windows 消 ...
第一种方法在栈上产生一个CAsyncSocket对象, 而第二种方法在堆上产生CAsyncSocket对象;第一种方法中Create()成员函数用缺省参数产生一个字节流套接字,第二种方法中用Create()成员函数在指定的端口产生一个数字报套接字。Create()函数的原型为: BOOL Create( UINT nSocketPort = 0, int nSocketType = SOCK_STRE...
Accept函数的参数为一个空的CAsyncSocket对象,即由CAsyncSocket的构造函数构造的还未调用Create成员函数创建套接字的CAsyncSocket对象。 调用其它的CasyncSocket成员函数进行通信管理,调用Send和SendTo函数用于发送数据,调用Receive和ReceiveFrom函数用于接收数据; 网络通信结束后,对于在栈中创建的CAsyncSocket对象,如果对象超出定义...
首先我们利用VC++ 6.0的AppWizard创建一个基于对话框的应用程序,命名为FtpClientDemo。为程序生成五个基于CAsyncSocket的新类,这里列出主要代码。 CCommandSocket类的主要代码 void CCommandSocket::OnReceive(int nErrorCode) { //这个函数使得服务器的应答消息显示在编辑框上 char buffer=new char[4096]; memset(buffe...
CAsyncSocket::Connect CAsyncSocket::Create CAsyncSocket::Detach CAsyncSocket::FromHandle CAsyncSocket::GetLastError CAsyncSocket::GetPeerName CAsyncSocket::GetPeerNameEx CAsyncSocket::GetSockName CAsyncSocket::GetSockNameEx CAsyncSocket::GetSockOpt CAsyncSocket::IOCtl CAsyncSocket::Listen CAsyncSocket::m_hSocket CAsyncS...
收到一条消息后,应使用 IsBufferEmpty 来控制继续接收数据直到缓冲区为空的循环。 有关详细信息,请参阅类 CAsyncSocket 的Receive 成员函数,它显示了如何使用 IsBufferEmpty。有关详细信息,请参阅 Windows 套接字:对存档使用套接字。CArchive::IsLoading确定存档是否正在加载数据。