社区
网络编程
帖子详情
请教一个Socket问题!
huche
2002-12-05 07:21:50
我继承了一个CAsyncSocket类,采用非阻塞式,在Connect的时候,出错,GetLastError返回值是10035(WSAEWOULDBLOCK),我知道连接需要时间,但是无论我Sleep多长了之后还是没有触发OnConnect事件!所以在发送包的时候我无法判断是否真的已经连接上了.而在服务端是已经收到了连接请求的,请教各位!!!
...全文
34
18
打赏
收藏
请教一个Socket问题!
我继承了一个CAsyncSocket类,采用非阻塞式,在Connect的时候,出错,GetLastError返回值是10035(WSAEWOULDBLOCK),我知道连接需要时间,但是无论我Sleep多长了之后还是没有触发OnConnect事件!所以在发送包的时候我无法判断是否真的已经连接上了.而在服务端是已经收到了连接请求的,请教各位!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hdf_2000
2002-12-12
打赏
举报
回复
把基类改为CSocket
HongHuer
2002-12-10
打赏
举报
回复
怎么说的这么复杂了
连接有没有出错,不是靠Connect()的返回值来判断的
应用程序运行到Connect()后,系统会自动调用OnConnect(int nErrorCode)
CMySocket::OnConnect(int nErrorCode)
{
if(nErrorCode == 0) //连接成功了
{
}
else //连接不成功
{
}
}
GirlCool
2002-12-08
打赏
举报
回复
关注中,我用CAsyncSocket时,遇到了同样的问题.
CAsyncSocket在作为异步非阻塞方式时,总是在客户Socket连接服务器时,收到WSAEWOULDBLOCK的错误,我查看了CSocket的源代码,发现,CSocket在实现Connet()和Accept()时,一旦收到WSAEWOULDBLOCK错误,就进入一个消息PumpMessage,然后又反复连接(接受),直到成功.
这使我不明白,CSocket为什么在收到WSAEWOULDBLOCK错误时,总进入消息循环,然后重试,直到成功.
swordman
2002-12-08
打赏
举报
回复
你代码的顺序写反了,connect完成以后再调用函数AsyncSelect()!这错误我同事出现过
yanhuahui
2002-12-07
打赏
举报
回复
你就把时间先设成永远超时,然后调试看看它的流程。
yanhuahui
2002-12-06
打赏
举报
回复
你那样写能保证会在Send之前为什么没有触发OnConnect事件?不一定.....
在send之前用一个等待事件
WaitForSingleObject(m_CEvent);
在OnConnnect()函数里将这个m_CEvent.SetEvent()
huche
2002-12-06
打赏
举报
回复
BOOL CMyClientSocket::ConnectToServer()
{
if (m_hSocket==INVALID_SOCKET)
{
if (Create()==FALSE)
{
return false;
}
}
else
{
Detach();
if (Create()==FALSE)
{
return false;
}
}
if(!AsyncSelect(FD_CONNECT | FD_CLOSE | FD_READ | FD_WRITE))
return false;
m_bConnecting = true;
if(!Connect(m_strHostAddress, m_iPort))
{
i = GetLastError(); // 此处i将是10035
if(i==10035) // 忽略这个错误继续
return true;
else
return false
}
return true ;
}
void CMyClientSocket::OnConnect(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
if (nErrorCode!=0)
{
m_bConnecting=false;
return;
}
m_bConnected = true;
m_bConnecting = false ;
CAsyncSocket::OnConnect(nErrorCode);
}
------------
处理文件:
.
.
.
m_pSocket=new CMyClientSocket();
if(!m_pSocket->ConnectToServer())
{
ShowMyMsg("连接服务端失败!", true);// 此处是我写的一个错误信息处理函数
// 由于前面忽略了错误,所以不会执行到此处
delete m_pSocket;
return 0;
}
if(m_bConnected) // m_bConnected 将为false,因为没有触发OnConnect事件.
Send(.....);
// 如果不判断m_bConnected直接Send,服务端能收到请求包
.
.
.
我现在的问题是在Send之前为什么没有触发OnConnect事件,那样我怎么判断是否已经连接上?因为如果服务端没有启动,Connect也是那个错误啊.
wanglei888
2002-12-06
打赏
举报
回复
还是贴程序看看吧。。。
huche
2002-12-06
打赏
举报
回复
服务器端是没有问题的,是别人已经在用着的产品.
即使服务端没有启动调用Connect后再调用GetLastError返回的错误代码也是10035,所以我不知该怎么判断是否已经连接上了.难道不判断就直接Send吗?
if(!AsyncSelect(FD_CONNECT | FD_CLOSE | FD_READ | FD_WRITE))
return false;
if(!Connect(StrHostAddress, iPort))
{
i = GetLastError(); //此处i将是10035
....
}
wanglei888
2002-12-06
打赏
举报
回复
服务器端在OnAccept中调用Accept了没有?
huche
2002-12-06
打赏
举报
回复
你们有可能没有理解我的意思或者我没有讲清楚.
一开始我是没有使用Sleep的,但是在Send的时候出错了,跟踪发现是没有触发 OnConnect事件,并发现Connect的时候调用GetLastError返回的错误代码是10035,这个错误代码是表示连接需要时间,所以我等它连接完成啊,所以我用了Sleep.但还是触发不了OnConnect事件,由于触发不了这个事件就修改不了状态标志,我是在OnConnect事件中修改各个状态标志的,所以...
但令我纳闷的是服务端每次都是收到了连接请求的,所以Connect之前的代码是应该没有问题的.
HongHuer
2002-12-06
打赏
举报
回复
把断点设在connect OnConnect 中看看结果
huche
2002-12-06
打赏
举报
回复
To anyiflyer(西门吹雪)
AsyncSelect是设置为异步非阻塞式,服务器端就是异步非阻塞式.
huche
2002-12-06
打赏
举报
回复
To yanhuahui(眼发黑)
我照着你说的做了,我即使把超时时间设置到十几秒都照样超时!
门吹西风
2002-12-06
打赏
举报
回复
CAsyncSocket缺省是阻塞方式的,CAsyncSocket::GetLastError()返回10035,表示该socket不是阻塞方式工作,而是异步方式工作,原因是你调用了CAsyncSocket::AsyncSelect(),该调用会把socket置为异步方式,所以会出现你说的错误.由于服务器是别人写好的,你不能改它,只有改你自己的了.
wanglei888
2002-12-05
打赏
举报
回复
不能sleep的,connect后,就别管了
在OnConnect中进行下一步处理
athere_08
2002-12-05
打赏
举报
回复
你不睡眠不行吗?为什么要睡眠呢!
Bind
2002-12-05
打赏
举报
回复
应该是这样的:
CMySocket m_sock;
m_sock.Create();
m_sock.Connect(m_strServerIP, m_uiServerPort);
到这里连接的调用就结束了。接下来就会触发CMySocket::OnConnect的消息了。
C#串口转
Socket
带原码
VS2005串口转
Socket
通信带调试功能。通信帧按照电力规约进行封装。对上位机通信调试大有帮助.带源码。有
问题
随时
请教
:QQ 376033812 Email:xiaoligeng@126.com
Qt学习 之
Socket
通信(世界上最简单的例子了) - imxiangzi的专栏 - CSDN博客1
引言最近也有很多人来向我"
请教
",他们大都是一些刚入门的新手,还不了解这个行业,也不知道从何学起,开始的…阅读数 411博文来自: bigsai我花了一夜用数据
JAVA网络(单机也可)聊天室加报告
随着大众化、小型化趋势的加剧,网络聊天在当今已经不算新鲜事物,聊天室可以更好的方便大家交流,
请教
或探讨
问题
,同时也能开阔视野。但大多数网络聊天都需要借助位于Internet的服务器,这就给那些具有大规模内部...
python sorted函数的小练习及解答
前两天学习了一下
socket
编程,在向某大神
请教
问题
时被嫌弃了,有一种还没学会走就想跑的感觉。大神说我现在的水平应该去做一些像是操作文件、序列号等的小练习来加深理解。下面是他给我出的小练习: 1、datas = [[...
python sorted函数原理解析及练习
前两天学习了一下
socket
编程,在向某大神
请教
问题
时被嫌弃了,有一种还没学会走就想跑的感觉。大神说我现在的水平应该去做一些像是操作文件、序列号等的小练习来加深理解。下面是他给我出的小练习: 1、datas = [[...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章