CSocket&的问题OnReceive() [英] Problem with CSocket & OnReceive()

查看:106
本文介绍了CSocket&的问题OnReceive()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好
我正在尝试将tcp服务器/客户端通信模块写入我的软件.我的CNewClientSocket存在问题-没有对OnReceive()函数的输入.
ServerThread:

Hello
I''m trying to write tcp server/client communication module to my software. I have problem with my CNewClientSocket - no entry to OnReceive() function.
ServerThread:

<br />
	if ( serverSocket.Create( SERVER_PORT ) ) {<br />
		while ( working ) {<br />
			if ( serverSocket.Listen() ) {<br />
				if ( serverSocket.Accept( clientSocket, (SOCKADDR*)&clientAddress, &addressSize  ) ) {<br />
					CClientThread* newClientThread = (CClientThread*)AfxBeginThread( RUNTIME_CLASS(CClientThread), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED );<br />
					newClientThread->setSocketHandle(clientSocket.m_hSocket);<br />
					newClientThread->setSocketAddress( clientAddress );<br />
					newClientThread->setParent(this);<br />
					clientsMap.SetAt( newClientThread, clientAddress );<br />
					clientSocket.Detach();<br />
					newClientThread->ResumeThread();		<br />
				}<br />
			} else {<br />
					// ERROR}<br />
		}<br />
	} else {<br />
		//ERROR<br />
	}<br />



ClientThread上的InitInstance:



InitInstance on ClientThread:

<br />
	if (!AfxSocketInit()) {<br />
		return FALSE;<br />
	}<br />
<br />
	socket.Attach( handle );<br />
	socket.Send( "HELLO", 5 );<br />
<br />
	char bufor[4096];<br />
	int bytes = 0;<br />
<br />
	while ( TRUE ) {<br />
		::Sleep(100);<br />
	}<br />
	AfxEndThread(0);<br />
	return TRUE;<br />



我的套接字-是CNewClientSocket的实例,该实例派生自CSocket:

NewClientSocket.h:



My socket - is instance of CNewClientSocket which is derived from CSocket:

NewClientSocket.h:

<br />
#pragma once<br />
<br />
// CNewClientSocket command target<br />
<br />
class CNewClientSocket : public CSocket<br />
{<br />
public:<br />
//	DECLARE_DYNAMIC( CNewClientSocket )<br />
	CNewClientSocket();<br />
	virtual ~CNewClientSocket();<br />
<br />
	//{{AFX_VIRTUAL(CNewClientSocket) <br />
public:<br />
	virtual void OnReceive(int nErrorCode); <br />
	virtual void OnClose(int nErrorCode);<br />
	//}}AFX_VIRTUAL <br />
<br />
	// Generated message map functions<br />
	//{{AFX_MSG(CNewClientSocket)<br />
	// NOTE - the ClassWizard will add and remove member functions here.<br />
	//}}AFX_MSG<br />
};<br />
<br />



NewClientSocket.cpp:



NewClientSocket.cpp:

<br />
// NewClientSocket.cpp : implementation file<br />
//<br />
<br />
#include "stdafx.h"<br />
#include "DASim.h"<br />
#include "NewClientSocket.h"<br />
<br />
<br />
// CNewClientSocket<br />
<br />
<br />
//IMPLEMENT_DYNAMIC( CNewClientSocket, CSocket )<br />
<br />
CNewClientSocket::CNewClientSocket() {<br />
}<br />
<br />
CNewClientSocket::~CNewClientSocket() {<br />
}<br />
<br />
#if 0<br />
BEGIN_MESSAGE_MAP(CNewClientSocket, CSocket) <br />
	//{{AFX_MSG_MAP(CNewClientSocket) <br />
	//}}AFX_MSG_MAP <br />
END_MESSAGE_MAP() <br />
#endif<br />
<br />
// CNewClientSocket member functions<br />
<br />
void CNewClientSocket::OnReceive(int nErrorCode) {<br />
	CAsyncSocket::OnReceive(nErrorCode);<br />
}<br />
<br />
void CNewClientSocket::OnClose(int nErrorCode)<br />
{<br />
	// TODO: Add your specialized code here and/or call the base class<br />
<br />
	CAsyncSocket::OnClose(nErrorCode);<br />
}<br />



OnReceive无法正常工作...有人知道为什么吗?
谢谢...



OnReceive not working... Anyone knows why ?
Thank you...

推荐答案

我建​​议不要使用CSocket ,因为它不可靠.通过在每次出现WSAEWOULDBLOCK 错误时运行一个小的消息泵,它还会伪造阻止网络连接的功能,仅使用普通的Winsock会更容易.另外,还有许多C ++网络类按字母顺序排列:

* Alhem
* 提升
* SharkEngine
* QT
* 和许多其他 ...

希望这会有所帮助!
I recomment not using CSocket because it is unreliable. It also fakes blocking networking by running a small message pump every time it gets a WSAEWOULDBLOCK error, it is easier to just use normal Winsock. As an alternative, there are many C++ network classes out there, in alphabetical order:

* Alhem
* Boost
* SharkEngine
* QT
* and many others...

Hope this helps!


这篇关于CSocket&amp;的问题OnReceive()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆