关于CSocket的问题

chxr 2002-05-17 04:29:39
小弟用CSocket来通讯,不过显示连接已经好了,
但是老是不触发OnConnect和OnReceive
等事件到底是怎么回事呀?

void CMainFrame::OnConnect()
{
// TODO: Add your command handler code here
CTestSocket m_WSClient;
CTestSocket m_WSServer;

m_WSClient.Create();
if(m_WSClient.m_hSocket)
{
}
BOOL bconnect=m_WSClient.Connect("172.18.1.5",3000);

}
其中bconnect为1,应该是连接成功了。不过老是不触发事件是怎么回事呀。。
...全文
57 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
chxr 2002-05-20
  • 打赏
  • 举报
回复
啊。我就是这么处理的呀。。不过真的没有触发那个事件我也不知道怎么回事。至于学费的事情。我想学东西总有个早晚吧。。
freelybird 2002-05-20
  • 打赏
  • 举报
回复
对了,这么简单的问题也拿出来讨论,你应该多交些学费的,50分点数太少,至少应该拿200分出来,这也表示一种诚意
freelybird 2002-05-20
  • 打赏
  • 举报
回复
兄弟,用CSocket做是最简单的啦,怎么会没触发OnReceive(...)呢?下面我大概说说,对了,留下你的mail,我有时间发个demo给你.
1 CSocket采用异常方式,在它内部绑定了一个窗口,最后I/O流通过窗口消息回流OnOnAccept(...)OnReceive(..)等这样的OnXXX(...)函数.
2 在CTestSocket类中,覆盖OnXXX(...)之类的函数
3 服务器端server
CTestSocket server;
server.Create(8900);
server.Listen();//这样后,当有client连接时,OnAccept(...)这个函数就会执行,你在其中接受连接,并建立client
CTestSocket* pSocketclient = new CTestSocket();
this->Accept(*pSocketclient));

4 客户端client

CTestSocket client;
client.Create();
client.Connect("127.0.0.1", 8900);
//成功后,你可以发送数据,server的OnReceive(...)函数执行;同样,当server发送数据时,你的Onreceive(...) 也会执行
anjy 2002-05-20
  • 打赏
  • 举报
回复
OnConnect()是在connect()调用返回后触发的。
你要连接到服务器端,需要自己调用connect().
Yokishiro 2002-05-20
  • 打赏
  • 举报
回复
OnConnect和OnReceive是CSocket中的怎麽你的程序是這樣:
void CMainFrame::OnConnect()
你應該從CSocket派生你的CSocket類,然後改寫其中的這兩個虛函數
chxr 2002-05-20
  • 打赏
  • 举报
回复
HI.1。目前在用TCP不是UDP,
2。你说的似乎来源于socket api,不过那样写麻烦了一点,
VC中只用重新处理那个消息即可。。不知道是不是。。
alidiedie 2002-05-18
  • 打赏
  • 举报
回复
点数太少了。老弟,
我想说明几点:
1:你用的是UDP协议吧,这样你的服务端就不用侦听,也不用ONCONNECT.
2:你得用WSASelectNextEvent(hwnd,wm_mymessage,0,FD_READ)
去触发读取数据的消息响应函数。例如:
#define WM_RECEIVE WM_USER+101//自定义消息
afx_msg LRESULT OnReceive(WPARAM wparam,LPARAM lparam);//消息相应
ON_MESSAGE(WM_RECEIVE,OnReceive)//映射宏

在联结(connect()成功后,调用
WSASelectNextEvent(hwnd,WM_RECEIVE,0,FD_READ)触发下一事件,调用这个函数的好处是非阻塞异人处理,然后只要有数据到达,就是FD_READ事件发生,就会触发WM_RECEIVE 消息,OnReceive就会响应。
afx_msg LRESULT OnReceive(WPARAM wparam,LPARAM lparam)
{
char buffer[1024];
int size=recev(socketaddr,buffer,sizeof(buffer);
//就可以读数据了


}
chxr 2002-05-17
  • 打赏
  • 举报
回复
快看看啊。。不会吧。同样的消息有server,client之分吗?
再说receieve也不行呀。。
vtable9999 2002-05-17
  • 打赏
  • 举报
回复
SERVER端才有OnConnect事件
chxr 2002-05-17
  • 打赏
  • 举报
回复
不会吧。应该没什么啊,这个是Client.
class CTestSocket : public CSocket
{
...
}
其中处理了三个触发事件:
virtual void OnReceive(int nErrorCode);
virtual void OnSend(int nErrorCode);
virtual void OnConnect(int nErrorCode);
而server段那边发送data,结果显示连接成功,
可是却没有触发onconnect,onreceive等事件,不知道怎么回事。。
xuying 2002-05-17
  • 打赏
  • 举报
回复
你还没有发送数据。
kkk16 2002-05-17
  • 打赏
  • 举报
回复

看不明白你的意思。
kkk16 2002-05-17
  • 打赏
  • 举报
回复

看不明白你的意思。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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