⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_35759.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:35759 发表者:oldwolf 发表日期:2003-04-09 11:11:42
<br>主题:关于CAsyncSocket连接的问题,请大家指教
<br>内容:我编了一个简单的客户/服务器软件,但是在连接时出错,不知道为什么请大家指点。现把源码贴上。(谢谢哈!)<BR>客户端:<BR>/////ClientSock.h<BR>class CClientSock : public CAsyncSocket<BR>{<BR>// Attributes<BR>public:<BR>// Operations<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;CClientSock();<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual ~CClientSock();<BR>// Overrides<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;// ClassWizard generated virtual function // Implementation<BR>protected:<BR>};<BR>///ClientSock.cpp<BR>CClientSock::CClientSock()<BR>{<BR>}<BR>CClientSock::~CClientSock()<BR>{<BR>}<BR><BR>////ClientAsyncSocketDlg.h<BR>#include "ClientSock.h"<BR>// CClientAsyncSocketDlg dialog<BR>class CClientAsyncSocketDlg : public CDialog<BR>{<BR>// Construction<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;CClientAsyncSocketDlg(CWnd* pParent = NULL);&nbsp;&nbsp;&nbsp;&nbsp;// standard constructor<BR>&nbsp;&nbsp;&nbsp;&nbsp;CClientSock m_Clientsock;<BR>// Dialog Data<BR>&nbsp;&nbsp;&nbsp;&nbsp;//{{AFX_DATA(CClientAsyncSocketDlg)<BR>&nbsp;&nbsp;&nbsp;&nbsp;enum { IDD = IDD_CLIENTASYNCSOCKET_DIALOG };<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;&nbsp;&nbsp;&nbsp;m_strMessage;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;&nbsp;&nbsp;&nbsp;m_strName;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;m_iPort;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//}}AFX_DATA<BR>&nbsp;&nbsp;&nbsp;&nbsp;// ClassWizard generated virtual function overrides<BR>&nbsp;&nbsp;&nbsp;&nbsp;//{{AFX_VIRTUAL(CClientAsyncSocketDlg)<BR>&nbsp;&nbsp;&nbsp;&nbsp;protected:<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual void DoDataExchange(CDataExchange* pDX);&nbsp;&nbsp;&nbsp;&nbsp;// DDX/DDV support<BR>&nbsp;&nbsp;&nbsp;&nbsp;//}}AFX_VIRTUAL<BR>// Implementation<BR>protected:<BR>&nbsp;&nbsp;&nbsp;&nbsp;HICON m_hIcon;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// Generated message map functions<BR>&nbsp;&nbsp;&nbsp;&nbsp;//{{AFX_MSG(CClientAsyncSocketDlg)<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual BOOL OnInitDialog();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnSysCommand(UINT nID, LPARAM lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnPaint();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg HCURSOR OnQueryDragIcon();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnBsend();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnBconnect();<BR>&nbsp;&nbsp;&nbsp;&nbsp;//}}AFX_MSG<BR>&nbsp;&nbsp;&nbsp;&nbsp;DECLARE_MESSAGE_MAP()<BR>};<BR>/////ClientAsyncSocketDlg.cpp<BR>void CClientAsyncSocketDlg::OnBsend() <BR>{&nbsp;&nbsp;<BR>&nbsp;&nbsp; int iLen;<BR>&nbsp;&nbsp; int iSent;<BR>&nbsp;&nbsp; this-&gt;UpdateData(true);<BR>if(this-&gt;m_strMessage!="")<BR>{<BR>&nbsp;&nbsp;iLen=m_strMessage.GetLength();<BR>&nbsp;&nbsp;iSent=m_Clientsock.Send(LPCTSTR(m_strMessage),iLen);<BR>&nbsp;&nbsp;if (iLen == SOCKET_ERROR )&nbsp;&nbsp; <BR>&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp; DWORD dwErr=CAsyncSocket::GetLastError();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp; return;&nbsp;&nbsp; <BR>&nbsp;&nbsp; }<BR> }<BR>}<BR><BR>void CClientAsyncSocketDlg::OnBconnect() <BR>{<BR>&nbsp;&nbsp; this-&gt;UpdateData(true);<BR>&nbsp;&nbsp;if(!this-&gt;m_Clientsock.Create())<BR>{ DWORD dwErr=CAsyncSocket::GetLastError();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp; return;<BR>}&nbsp;&nbsp; <BR>&nbsp;&nbsp; if(!this-&gt;m_Clientsock.Connect((LPCTSTR(m_strName,m_iPort))<BR>{<BR>&nbsp;&nbsp;DWORD dwErr=CAsyncSocket::GetLastError();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp; return;<BR>}&nbsp;&nbsp; <BR>}<BR>服务器端<BR>/////ServeSocket.h<BR>class CServerAsyncSocketDlg;<BR>// CServeSocket command target<BR>class CServeSocket : public CAsyncSocket<BR>{<BR>public:<BR> CServerAsyncSocketDlg* pWnd;<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;CServeSocket();<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual ~CServeSocket();<BR>// Overrides<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;// ClassWizard generated virtual function overrides<BR>&nbsp;&nbsp;&nbsp;&nbsp;//{{AFX_VIRTUAL(CServeSocket)<BR>&nbsp;&nbsp;&nbsp;&nbsp;public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual void OnAccept(int nErrorCode);<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual void OnReceive(int nErrorCode);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//}}AFX_VIRTUAL<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// Generated message map functions<BR>&nbsp;&nbsp;&nbsp;&nbsp;//{{AFX_MSG(CServeSocket)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// NOTE - the ClassWizard will add and remove member functions here.<BR>&nbsp;&nbsp;&nbsp;&nbsp;//}}AFX_MSG<BR>// Implementation<BR>protected:<BR>};<BR>CServeSocket::CServeSocket()<BR>{<BR>}<BR><BR>CServeSocket::~CServeSocket()<BR>{<BR>}<BR><BR>////////ServeSocket.cpp<BR>// CServeSocket member functions<BR>void CServeSocket::OnAccept(int nErrorCode) <BR>{&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;if(nErrorCode==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!Accept(pWnd-&gt;m_servesock))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD dwErr = CAsyncSocket::GetLastError(); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;CAsyncSocket::OnAccept(nErrorCode);<BR>}<BR><BR>void CServeSocket::OnReceive(int nErrorCode) <BR>{<BR>if(nErrorCode==0)<BR>{<BR>&nbsp;&nbsp;char szBuf[CHAR_MAX];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;memset(szBuf, 0, sizeof(szBuf));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;int iLen = Receive(szBuf, sizeof(szBuf));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;if (!iLen )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp; DWORD dwErr = CAsyncSocket::GetLastError();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp; return;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;}<BR>}<BR> CAsyncSocket::OnReceive(nErrorCode);<BR>}<BR>////ServerAsyncSocketDlg.h<BR>class CServerAsyncSocketDlg : public CDialog<BR>{<BR>public:<BR>CServerAsyncSocketDlg(CWnd* pParent = NULL);<BR>CServeSocket m_servesock;<BR>// Dialog Data<BR>&nbsp;&nbsp;&nbsp;&nbsp;//{{AFX_DATA(CServerAsyncSocketDlg)<BR>&nbsp;&nbsp;&nbsp;&nbsp;enum { IDD = IDD_SERVERASYNCSOCKET_DIALOG };<BR>&nbsp;&nbsp;&nbsp;&nbsp;CListBox&nbsp;&nbsp;&nbsp;&nbsp;m_lReceive;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;m_iPort;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//}}AFX_DATA<BR>&nbsp;&nbsp;&nbsp;&nbsp;// ClassWizard generated virtual function overrides<BR>&nbsp;&nbsp;&nbsp;&nbsp;//{{AFX_VIRTUAL(CServerAsyncSocketDlg)<BR>&nbsp;&nbsp;&nbsp;&nbsp;protected:<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual void DoDataExchange(CDataExchange* pDX);&nbsp;&nbsp;&nbsp;&nbsp;// DDX/DDV support<BR>&nbsp;&nbsp;&nbsp;&nbsp;//}}AFX_VIRTUAL<BR>// Implementation<BR>protected:<BR>&nbsp;&nbsp;&nbsp;&nbsp;HICON m_hIcon;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// Generated message map functions<BR>&nbsp;&nbsp;&nbsp;&nbsp;//{{AFX_MSG(CServerAsyncSocketDlg)<BR>&nbsp;&nbsp;&nbsp;&nbsp;virtual BOOL OnInitDialog();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnSysCommand(UINT nID, LPARAM lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnPaint();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg HCURSOR OnQueryDragIcon();<BR>&nbsp;&nbsp;&nbsp;&nbsp;afx_msg void OnBlisten();<BR>&nbsp;&nbsp;&nbsp;&nbsp;//}}AFX_MSG<BR>&nbsp;&nbsp;&nbsp;&nbsp;DECLARE_MESSAGE_MAP()<BR>};<BR>////ServerAsyncSocketDlg.cpp<BR>void CServerAsyncSocketDlg::OnBlisten() <BR>{<BR>&nbsp;&nbsp; UpdateData(true);<BR>&nbsp;&nbsp; if(!this-&gt;m_servesock.Create(m_iPort))<BR>&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp; DWORD dwErr = CAsyncSocket::GetLastError();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp; return; <BR>&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR> if(!this-&gt;m_servesock.Listen())<BR>&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp; DWORD dwErr = CAsyncSocket::GetLastError();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp; return;<BR>&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>}<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:冬冬冬 回复日期:2003-04-09 17:00:47
<br>内容:void CServeSocket::OnAccept(int nErrorCode) <BR>{&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;if(nErrorCode==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!Accept(pWnd-&gt;m_servesock))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD dwErr = CAsyncSocket::GetLastError(); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;CAsyncSocket::OnAccept(nErrorCode);<BR>}<BR><BR><BR>其中Accept函数是否调用错了?你仔细看看。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:qxg 回复日期:2003-05-07 10:25:46
<br>内容:void CServeSocket::OnAccept(int nErrorCode) <BR>{&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;if(nErrorCode==0)<BR>其中Accept函数调用错了,你仔细看看。<BR><BR>Accept函数的参数应是一个空的套接字,因此你传递的参数应是一个象(CClientSock )Clientsock的参数用于收发数据,好好看看CAysncSocket的介绍。<BR><BR>void CServeSocket::OnAccept(int nErrorCode) <BR>{&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;if(nErrorCode==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!Accept(Clientsock))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD dwErr = CAsyncSocket::GetLastError(); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;CAsyncSocket::OnAccept(nErrorCode);<BR>}<BR><BR><BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:oldwolf 回复日期:2003-05-12 10:50:42
<br>内容:首先我真心感谢楼上两位朋友的热心。这个问题我原来已经解决了,但是为了感谢你们,我还是把分数送给你们!希望大家共同前进。同时请问一下,怎样把分数能平均分给你们呢
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -