如何判断connect 成功?

guolaikk 2012-05-21 03:15:32
客户端如何判断connect 成功? 通过返回值,按说是 If no error occurs, connect returns zero.

可是大部分情况it returns SOCKET_ERROR, WSAGetLastError 10035

那到底怎样判断是否连接成功呢?先判断是否为0


if(ret == 0)
//connect success
else
if(ret == SOCKET_ERROR)
if( WSAGetLastError() == 10035)
//connect success



难道需要这样???一般来说实际应用中conncet成功之后总要给出个提示吧
...全文
585 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
guolaikk 2012-05-23
  • 打赏
  • 举报
回复
这个问题解决了。这个程序里有好几个Asyncselect对象,每个对象都有一个WM×××SOCKET的消息相应函数。原来是好几个函数看上去比较像,弄混了!!!


汗死我了,每次纠结我好长时间的问题,都是这种低级问题

汗流浃背
汗如雨下
成吉思汗啊

guolaikk 2012-05-23
  • 打赏
  • 举报
回复
这个问题解决了。我这个程序里有好几个Asyncselect对象,每个对象都有一个WM×××SOCKET的消息相应函数。原来是好几个函数看上去比较像,弄混了!!!


汗死我了,每次纠结我好长时间的问题,都是这种低级问题

汗流浃背
汗如雨下
成吉思汗啊
向立天 2012-05-21
  • 打赏
  • 举报
回复
过来看看
可惜帮不上什么忙
guolaikk 2012-05-21
  • 打赏
  • 举报
回复
是呀,就是这样的,WSAAsyncSelect()的最后一个参数,里边有FD_CONNECT |,我还好好看了看。而且FD_WRITE 也好使。就是FD_CONNECT 不好使
Eleven 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
引用 6 楼 的回复:
引用 5 楼 的回复:
楼主补充 4 楼 的回复:
msdn上说:
If the application is using WSAAsyncSelect to indicate interest in connection events, then the application will receive an FD_CONNECT notification ind……
[/Quote]
WSAAsyncSelect(SOCKET, hWnd, MSG_XXXX, FD_CONNECT | xxx);

LRESULT CALLBACK WndProc(...)
{
switch(message)
{
case MSG_XXXX:
{
switch(WSAGETSELECTEVENT(lParam))
{
case FD_CONNECT:
MessageBox(0,TEXT("FD_CONNECT"),TEXT("FD_CONNECT"),MB_OK);
break;
....
}
break;
}
return DefWindowProc(...);
}

大致模式是这样的~
guolaikk 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:
楼主补充 4 楼 的回复:
msdn上说:
If the application is using WSAAsyncSelect to indicate interest in connection events, then the application will receive an FD_CONNECT notification indicating that ……
[/Quote]
没有什么消息映射,sdk自己封装的,不是mfc。不过也一样,关键的部分贴出来了

switch(WSAGETSELECTEVENT(lParam))
{
case FD_CONNECT:
MessageBox(0,TEXT("FD_CONNECT"),TEXT("FD_CONNECT"),MB_OK);
break;
case FD_READ:
……


就是通过这个判断的,从来没出过这个消息框,我把connect放到一个按钮的消息相应函数里了。
Eleven 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
楼主补充 4 楼 的回复:
msdn上说:
If the application is using WSAAsyncSelect to indicate interest in connection events, then the application will receive an FD_CONNECT notification indicating that the connect o……
[/Quote]
消息映射加的都对?
FD_CONNECT 通知表示请求连接的套接字,连接要求已被处理
guolaikk 2012-05-21
  • 打赏
  • 举报
回复
[Quote=楼主补充 4 楼 的回复:]
msdn上说:
If the application is using WSAAsyncSelect to indicate interest in connection events, then the application will receive an FD_CONNECT notification indicating that the connect operation is com……
[/Quote]
哦,对了。补充一句:我用的就是WSAAsyncSelect
guolaikk 2012-05-21
  • 打赏
  • 举报
回复
msdn上说:
If the application is using WSAAsyncSelect to indicate interest in connection events, then the application will receive an FD_CONNECT notification indicating that the connect operation is complete (successfully or not).

可是我这样,从来都没收到过FD_CONNECT呀:


switch(WSAGETSELECTEVENT(lParam))
{
case FD_CONNECT:
MessageBox(0,TEXT("FD_CONNECT"),TEXT("FD_CONNECT"),MB_OK);
break;
case FD_ACCEPT:
……


guolaikk 2012-05-21
  • 打赏
  • 举报
回复
哦,原来msdn上有,汗。我先看看了,有问题再跟帖
rollrock1987 2012-05-21
  • 打赏
  • 举报
回复
阻塞的不说
非阻塞的 如果是 error的话 需要判断错误码 一般会有一个 processing之类的,如果是这个的话表示数据可以发送,也就是说你直接send就可以了 。
akmm88 2012-05-21
  • 打赏
  • 举报
回复
如果是 阻塞是connect 成功返回0 否则就是失败.
如果是 非阻塞, 返回值 一般可以忽略,通过SELECT去判断是否连接成功.

18,356

社区成员

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

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