小声的问一个弱问题:Client先connect然后Server再Listen为什么不行? 偶用CAsyncSocket进行编程,如果Server先运行,开始Listen,那么Client再开始Connect就可以正常连接,但是如果先开Client,让他Connect,然后再打开Server去Listen,那么Client就连接不上,这时怎么回事?怎么解决呢?偶初学Socket编程,希望大家多多指教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 当然不行啦,你先Connect,但这时Server还没有Listen,当然失败了,一失败就退出去了。这时候再Listen,有什么用呢?你可以在Connect前先Sleep一下,或者来个循环Connect呀,直到成功为止 服务器要先listen, 客户端才能connect先connect,再listen当然不行 你可以循环Connect,直到成功为止。Connect时,Client要发出一个寻找Server对应接口的报文,如果Server没Listen,就会失败退出,要重新Connect,你就得手动实现。 客户的connect是寻找服务器的地址和断口号,如果服务器的断口是监听状态的话,就可以建立连接了,如果不再监听状态连接就失败了。这时客户的connect事件已经执行完毕。而服务器的Listen事件是一致执行的,就像一个死循环,直到winsocket释放。如果你想实现你要的情况, bsk(bsk) 的方法可以实现,但是应该用进程实现。 做一个循环!一直尝试connect,直到成功退出!或设定connect次数!都可以!! 我用while(nCode==0) nCode=m_sConnectSocket.Connect(name,port);虽然可以连上,但是然后客户端就像是死掉了一样,没什么反映了,怎么回事? while ( nCode==0 ){nCode=m_sConnectSocket.Connect(name,port);Sleep(100);} 你首先要理解清楚LISTEN函数的作用:是让套接字进入等候连接的状态。如果SERVER还没进入这个状态,你CLIENT发过来的东西SERVER当然不‘理’你啦 while ( nCode==0 ){nCode=m_sConnectSocket.Connect(name,port);Sleep(100);} Server 如果不Listen该端口,你的Client的Connect是不会响应的 bsk:你的代码我试过了,不过现在好像是Server和Client都没反映了,怎么回事! 我又调试了一下,我发现在Client在Connect的循环中如果这时Server还没有开始Listen,那么第一次调用Connect时,用GetLastError()返回的错误是无法连接,然后再循环调用就返回的是参数错误,如果这时候Server开始Listen,那么再循环一次用GetLastError()返回的错误就是试图连接已连接的Socket,但是nCode=m_sConnectSocket.Connect(name,port);得到的nCode值一直都是0,为什么调用成功的时候返回的也不是非0呢?我查MSDN,上面写的是如果调用Connect成功返回的就是非0值,不解!!!我最后利用GetLastError()来控制循环,虽然程序可以正常运行了,但是用以前的方法怎么不行呢?就要结帖了,希望大家给个好的答案。! 自定义Credential Provider,WIN7 非企业版本不加载问题。 关于解码的错误 如何通ODBC数据源获得数据库名呢? 再次开放我的电子图书的ftp--接近2.5G,大家赶快下载! 在基于对话框的程序中如何将注**册**表中某主键下所有键值逐一读出 最近看了一家招聘网站半个月内的关于软件开发的招聘广告,几乎全招Delphi,感到迷茫 有什么简单的方法把dll变成ocx? 一个很简单的问题. 为什么我的图片一直存在透明问题。 如何做VC的工程管理的功能?? Super easy...如何设置CListCtrl为Report风格? 如何彻底让标题栏不让系统绘制窗口标题栏??????
这时候再Listen,有什么用呢?你可以在Connect前先Sleep一下,或者来个循环Connect呀,直到成功为止
先connect,再listen当然不行
如果你想实现你要的情况, bsk(bsk) 的方法可以实现,但是应该用进程实现。
nCode=m_sConnectSocket.Connect(name,port);
虽然可以连上,但是然后客户端就像是死掉了一样,没什么反映了,怎么回事?
nCode=m_sConnectSocket.Connect(name,port);
Sleep(100);
}
如果SERVER还没进入这个状态,你CLIENT发过来的东西SERVER当然不‘理’你啦
nCode=m_sConnectSocket.Connect(name,port);
Sleep(100);
}
你的代码我试过了,不过现在好像是Server和Client都没反映了,怎么回事!
我最后利用GetLastError()来控制循环,虽然程序可以正常运行了,但是用以前的方法怎么不行呢?
就要结帖了,希望大家给个好的答案。!