API Socket中的connect问题

mooninsun 2005-04-28 04:11:41
有这几点问题:
1.我编了个服务器端口8090和客户端,我调用connect连接环回地址127.0.0.1:8091
可是一直返回10035--WSAEWOULDBLOCK错误,为什么???
2.我用WSAAsyncSelect模型,connect调用时产生FD_CONNECT,如果不在FD_CONNECT中重写connect,
程序好象就不在调用connect了,不是说connect成功才产生FD_CONNECT的吗???
请高手指教,谢谢!!!
...全文
312 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
mooninsun 2005-04-29
  • 打赏
  • 举报
回复
对的,10022在MSDN里:In some instances, it also refers to the current state of the socket - for instance, calling accept on a socket that is not listening.
c4313848 2005-04-29
  • 打赏
  • 举报
回复
你要是在WSAAsyncSelect之后connect在补捉这个的确是FD_CONNECT,我记得,绑定FD_CONNECT之后,connect就进入了阻塞状态,在CONNECT是返回10035,也许我的解释是错的.
但是10022,我没有试过,
mooninsun 2005-04-29
  • 打赏
  • 举报
回复
是的,我把WSAAsyncSelect写在CONNECT之前
就是WM_INITDIALOG里socket调用之后:
WSAAsyncSelect (clientSock, hwnd, WM_SOCKET, FD_CONNECT|FD_READ|FD_WRITE|FD_CLOSE);
这样对吗?
c4313848 2005-04-29
  • 打赏
  • 举报
回复
WSAEINVAL (10022) Invalid argument.

提供了非法参数(例如,在使用setsockopt()函数时指定了非法的level)。在一些实例中,它也可能与套接字的当前状态相关,例如,在套接字没有使用listen()使其处于监听时调用accept()函数。



10022我倒是不知道,你没有开服务器,在我想当中应该是对方主机没有反应返回的错误
c4313848 2005-04-29
  • 打赏
  • 举报
回复
恩,你是用WSAAsyncSelect在CONNECT之前吧
然后才判断CONNECT的连接是否成功是吗
mooninsun 2005-04-29
  • 打赏
  • 举报
回复
现在如果不开服务器
试图连接时,首先返回10035,接着10022
mooninsun 2005-04-29
  • 打赏
  • 举报
回复
而且,如果不开服务器,
试图连接时,也回连接成功了,但是紧接着就是一个10035的错误
mooninsun 2005-04-29
  • 打赏
  • 举报
回复
我按你的方法做了
的确连接成功了,但是紧接着就是一个10035的错误,
为什么呢?
c4313848 2005-04-29
  • 打赏
  • 举报
回复
要是在CONNECT之前WSAAsyncSelect的话,你connect的时候,可以不用判断能否连接上,然后就是在

FD_CONNECT之后加入int iErrorCode = WSAGETSELECTERROR(lParam);
是在事件响应里

case FD_CONNECT:
{
if( 0 == iErrorCode )
TRACE("连接成功");
else
connect ();//重新连接
}

我一般是用这个做重连的
c4313848 2005-04-29
  • 打赏
  • 举报
回复
你可以,只WSAAsyncSelect一次,要是在CONNECT之后就不会有这种事情,
c4313848 2005-04-29
  • 打赏
  • 举报
回复
要是在connect之前绑定FD_CONNECT的话,你在CONNECT是有这个问题,这个可以做成重连的,


给你一个做法,

我一般是第一次连接的时候,没有判断就直接CONNECT();

是在事件响应里
int iErrorCode = WSAGETSELECTERROR(lParam);
是在事件响应里

case FD_CONNECT:
{
if( 0 == iErrorCode )
TRACE("连接成功");
else
connect ();//重新连接
}

dyugao 2005-04-29
  • 打赏
  • 举报
回复
1.我编了个服务器端口8090和客户端,我调用connect连接环回地址127.0.0.1:8091
是不是写错了?
连接环回地址127.0.0.1:8090?
mooninsun 2005-04-29
  • 打赏
  • 举报
回复
我看到了,谢谢,我的QQ:89556293
c4313848 2005-04-29
  • 打赏
  • 举报
回复
你有没有在vckbase上面看见这个 SOCKET API通讯程序源代码.zip,
要是没有这个例子,你把qq留下,我发给你
mooninsun 2005-04-29
  • 打赏
  • 举报
回复
好的
c4313848 2005-04-29
  • 打赏
  • 举报
回复
恩,WWW.VCKBASE.COM 我记的有例子,你可以去找一个看看
mooninsun 2005-04-29
  • 打赏
  • 举报
回复
c4313848
能帮我看一下代码吗?
我实在不晓得怎么办了,我重写了个简单的代码,但还有问题
mooninsun 2005-04-29
  • 打赏
  • 举报
回复
我怀疑我的服务器的问题
c4313848 2005-04-29
  • 打赏
  • 举报
回复
嘻嘻,我越看越糊涂了,

ACCEPT跟CONNECT 有什么关系
mooninsun 2005-04-29
  • 打赏
  • 举报
回复
是吗?
那我只有重写代码了:(
加载更多回复(10)

18,356

社区成员

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

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