📄 subject_35759.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> CClientSock();<BR> virtual ~CClientSock();<BR>// Overrides<BR>public:<BR> // 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> CClientAsyncSocketDlg(CWnd* pParent = NULL); // standard constructor<BR> CClientSock m_Clientsock;<BR>// Dialog Data<BR> //{{AFX_DATA(CClientAsyncSocketDlg)<BR> enum { IDD = IDD_CLIENTASYNCSOCKET_DIALOG };<BR> CString m_strMessage;<BR> CString m_strName;<BR> int m_iPort;<BR> //}}AFX_DATA<BR> // ClassWizard generated virtual function overrides<BR> //{{AFX_VIRTUAL(CClientAsyncSocketDlg)<BR> protected:<BR> virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support<BR> //}}AFX_VIRTUAL<BR>// Implementation<BR>protected:<BR> HICON m_hIcon;<BR><BR> // Generated message map functions<BR> //{{AFX_MSG(CClientAsyncSocketDlg)<BR> virtual BOOL OnInitDialog();<BR> afx_msg void OnSysCommand(UINT nID, LPARAM lParam);<BR> afx_msg void OnPaint();<BR> afx_msg HCURSOR OnQueryDragIcon();<BR> afx_msg void OnBsend();<BR> afx_msg void OnBconnect();<BR> //}}AFX_MSG<BR> DECLARE_MESSAGE_MAP()<BR>};<BR>/////ClientAsyncSocketDlg.cpp<BR>void CClientAsyncSocketDlg::OnBsend() <BR>{ <BR> int iLen;<BR> int iSent;<BR> this->UpdateData(true);<BR>if(this->m_strMessage!="")<BR>{<BR> iLen=m_strMessage.GetLength();<BR> iSent=m_Clientsock.Send(LPCTSTR(m_strMessage),iLen);<BR> if (iLen == SOCKET_ERROR ) <BR> { <BR> DWORD dwErr=CAsyncSocket::GetLastError(); <BR> return; <BR> }<BR> }<BR>}<BR><BR>void CClientAsyncSocketDlg::OnBconnect() <BR>{<BR> this->UpdateData(true);<BR> if(!this->m_Clientsock.Create())<BR>{ DWORD dwErr=CAsyncSocket::GetLastError(); <BR> return;<BR>} <BR> if(!this->m_Clientsock.Connect((LPCTSTR(m_strName,m_iPort))<BR>{<BR> DWORD dwErr=CAsyncSocket::GetLastError(); <BR> return;<BR>} <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> CServeSocket();<BR> virtual ~CServeSocket();<BR>// Overrides<BR>public:<BR> // ClassWizard generated virtual function overrides<BR> //{{AFX_VIRTUAL(CServeSocket)<BR> public:<BR> virtual void OnAccept(int nErrorCode);<BR> virtual void OnReceive(int nErrorCode);<BR> //}}AFX_VIRTUAL<BR><BR> // Generated message map functions<BR> //{{AFX_MSG(CServeSocket)<BR> // NOTE - the ClassWizard will add and remove member functions here.<BR> //}}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>{ <BR> if(nErrorCode==0)<BR> { <BR> if (!Accept(pWnd->m_servesock)) <BR> { <BR> DWORD dwErr = CAsyncSocket::GetLastError(); <BR> return; <BR> } <BR> }<BR> CAsyncSocket::OnAccept(nErrorCode);<BR>}<BR><BR>void CServeSocket::OnReceive(int nErrorCode) <BR>{<BR>if(nErrorCode==0)<BR>{<BR> char szBuf[CHAR_MAX]; <BR> memset(szBuf, 0, sizeof(szBuf)); <BR> int iLen = Receive(szBuf, sizeof(szBuf)); <BR> if (!iLen ) <BR> { <BR> DWORD dwErr = CAsyncSocket::GetLastError(); <BR> return; <BR> }<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> //{{AFX_DATA(CServerAsyncSocketDlg)<BR> enum { IDD = IDD_SERVERASYNCSOCKET_DIALOG };<BR> CListBox m_lReceive;<BR> int m_iPort;<BR> //}}AFX_DATA<BR> // ClassWizard generated virtual function overrides<BR> //{{AFX_VIRTUAL(CServerAsyncSocketDlg)<BR> protected:<BR> virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support<BR> //}}AFX_VIRTUAL<BR>// Implementation<BR>protected:<BR> HICON m_hIcon;<BR> // Generated message map functions<BR> //{{AFX_MSG(CServerAsyncSocketDlg)<BR> virtual BOOL OnInitDialog();<BR> afx_msg void OnSysCommand(UINT nID, LPARAM lParam);<BR> afx_msg void OnPaint();<BR> afx_msg HCURSOR OnQueryDragIcon();<BR> afx_msg void OnBlisten();<BR> //}}AFX_MSG<BR> DECLARE_MESSAGE_MAP()<BR>};<BR>////ServerAsyncSocketDlg.cpp<BR>void CServerAsyncSocketDlg::OnBlisten() <BR>{<BR> UpdateData(true);<BR> if(!this->m_servesock.Create(m_iPort))<BR> { <BR> DWORD dwErr = CAsyncSocket::GetLastError(); <BR> return; <BR> } <BR> if(!this->m_servesock.Listen())<BR> { <BR> DWORD dwErr = CAsyncSocket::GetLastError(); <BR> return;<BR> } <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>{ <BR> if(nErrorCode==0)<BR> { <BR> if (!Accept(pWnd->m_servesock)) <BR> { <BR> DWORD dwErr = CAsyncSocket::GetLastError(); <BR> return; <BR> } <BR> }<BR> 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>{ <BR> if(nErrorCode==0)<BR>其中Accept函数调用错了,你仔细看看。<BR><BR>Accept函数的参数应是一个空的套接字,因此你传递的参数应是一个象(CClientSock )Clientsock的参数用于收发数据,好好看看CAysncSocket的介绍。<BR><BR>void CServeSocket::OnAccept(int nErrorCode) <BR>{ <BR> if(nErrorCode==0)<BR> { <BR> if (!Accept(Clientsock)) <BR> { <BR> DWORD dwErr = CAsyncSocket::GetLastError(); <BR> return; <BR> } <BR> }<BR> 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 + -