频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

扔掉Socket实现网络编程

来源:Popunet 作者:流星 出处:巧巧读书 2005-11-06 进入讨论组
上一页 1 2 3 

  服务端

  Server端的编程与Client端的类似,下面主要介绍他的Listen及Accept函数。建立一个CNewSocket类,重载CAsyncSocket类的OnReceive、OnSend函数,如何进行信息的显示和发送可以参考Client程序。
本例中采用将收到信息原封不动发回的方法来实现Echo功能,代码如下:

  CNewSocket::OnReceive(int nErrorCOde)
{ m_nLength=Receive(m_szBuffer,sizeof(m_szBuffer),0);
AsyncSelect(FD_WRITE);}// 直接转发消息
CNewSocket::OnSend(int nErrorCode)
{ Send(m_szBuffer,m_nLength,0);}

  建立一个CMyServerSocket类,重载CAsyncSocket类的OnAccept函数代码如下:

  在MyServerSocket.h中声明变量

public::
CNewSocket* m_pSocket;
void CMyServerSocket::OnAccept(int nErrorCode)
{ CNewSocket* pSocket = new CNewSocket();
if (Accept(*pSocket))
{ pSocket- >AsyncSelect(FD_READ);
m_pSocket=pSocket;}else
delete pSocket;}

  为对话框添加一个“侦听”按钮,添加如下代码:

  在CsockServerDlg.ccp中声明变量
public:
CMyServerSocket m_srvrSocket;
void CCSockServerDlg::OnListen()
{ if (m_srvrSocket.m_hSocket==INVALID_SOCKET)
{ BOOL bFlag=m_srvrSocket.Create
(UserPort,SOCK_STREAM,FD_ACCEPT);
if (!bFlag)
{ AfxMessageBox(“Socket Error!”);
M_srvrSocket.Close();
PostQuitMessage(0);
Return;}}
if (!m_srvrSocket。Listen(1))
{ int nErrorCode = m_srvrSocket.GetLastError();
if (nError!=WSAEWOULDBLOCK)
{ AfxMessageBox(“Socket Error!”);
M_srvrSocket.Close();
PostQuitMessage(0);
Return;}}}

  CAsyncSocket类为我们使用Socket提供了极大方便。建立Socket的WSAStartup过程和bind过程被简化成为Create过程,IP地址类型转换、主机名和IP地址转换的过程中许多复杂的变量类型都被简化成字符串和整数操作,特别是CAsyncSocket类的异步特点,完全可以替代繁琐的线程操作。MFC提供了大量的类库,我们若能灵活的使用他们,便会大大提高编程的效率。
通告:http://www.qqread.com/vc/s920577020.html 更多文章 更多内容请看网络管理实用手册网络故障手册网络组网专题专题,或进入讨论组讨论。
上一页 1 2 3 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章