CSocket的OnReceive没有响应,代码如下?

bug1121 2012-07-21 09:15:09

==========================================================
程序启动时执行:
if (FALSE==AfxSocketInit())
{
AfxMessageBox("AfxSocketInit Failed");
}
==========================================================
class CDlgServerDlg中定义一个成员
CServerSocket Server;

类的定义:
CServerSocket::CServerSocket(void)
{

}

CServerSocket::~CServerSocket(void)
{

}

void CServerSocket::OnReceive(int nErrorCode)
{
AfxMessageBox("OnReceive");
CString strTmp("");
strTmp.GetBuffer(1000);
m_WorkSocket.Receive((void*)(strTmp.GetBuffer(0)),10);
m_RcvQueue.push(strTmp);
AfxMessageBox(strTmp);
CSocket::OnReceive(nErrorCode);
}

void CServerSocket::OnAccept(int nErrorCode)
{
if (FALSE==Accept(m_WorkSocket))
{
AfxMessageBox("Accept Failed");
}
else
{
AfxMessageBox("Accept Successed");
}
CSocket::OnAccept(nErrorCode);
}
=====================================================================
void CDlgServerDlg::OnBnClickedOk()
{
if (FALSE==Server.Create(5000,SOCK_STREAM))
{
AfxMessageBox("Create Failed");
}

if (FALSE==Server.Listen(5))
{
AfxMessageBox("Listen Failed");
}
}
=====================================================================
...全文
244 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
缘梦逍遥 2012-12-11
  • 打赏
  • 举报
回复
同求
bug1121 2012-07-21
  • 打赏
  • 举报
回复
2楼的方法试了,没效果
bug1121 2012-07-21
  • 打赏
  • 举报
回复

class CServerSocket : public CSocket
{
public:
CServerSocket(void);
public:
virtual ~CServerSocket(void);
public:
CSocket m_WorkSocket;
str_queue m_RcvQueue;
public:
virtual void OnReceive(int nErrorCode);
public:
virtual void OnAccept(int nErrorCode);
};

代码基本就这些了
bug1121 2012-07-21
  • 打赏
  • 举报
回复
套接字初始化检察没问题:

if (FALSE==AfxSocketInit())
{
AfxMessageBox("AfxSocketInit Failed");
}

Accept可以进去,异步接收,
这个娜戒海了 2012-07-21
  • 打赏
  • 举报
回复
accept,接收到的SOCKET做保存了没有,你的ACCEPT能进去么?
你用的异步接收还是啥玩意,代码不全,多贴点
Cikar_no1 2012-07-21
  • 打赏
  • 举报
回复
我程序在办公室电脑上,接收没问题的!

你先检查套接字初始化是不是完整正确,然后要注意strTmp.GetBuffer(1000);

一般定义的字符数组末尾要加 0
贪玩的老鼠 2012-07-21
  • 打赏
  • 举报
回复
m_WorkSocket.Receive((void*)(strTmp.GetBuffer(0)),10);
改为 Receive((void*)(strTmp.GetBuffer(0)),10);试试
bug1121 2012-07-21
  • 打赏
  • 举报
回复
当客户端连接时可以响应OnAccept,但响应不了OnReceive,客户端那边是一连接成功就开始发送数据的,不知道为什么不响应OnReceive,之前我想在控制台程序中用CSocket,结果连OnAccept都不响应,我想是因为控制台没有消息循环的关系吧,于是放在对话框中,像上面那样,终于可以响应OnAccept,但发数据不响应OnReceive,发送端返回的结果没有出错报告,求解释

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧