在调试的时候,发现,如果服务器没有打开侦听端口,则下面这行代码要等待很久,才会执行到下一行。。
m_SockComm->Connect(str,m_nIPPortNumber)
请问各位朋友,有什么办法可以解决吗?
11 个解决方案
#1
这个会有超时,因为客户端不知道服务端是否打开,可以开个线程等来做
#2
TCP默认的连接超时时间比较长。
而且socket连接默认的是阻塞模式,你可以讲其改为非阻塞模式,再计算超时。
http://blog.sina.com.cn/s/blog_4a6151550100xirf.html
而且socket连接默认的是阻塞模式,你可以讲其改为非阻塞模式,再计算超时。
http://blog.sina.com.cn/s/blog_4a6151550100xirf.html
#3
1,2楼的2个方法都很好,
有示例的代码就更好了。时间比较紧。
或者告诉我怎么找资料哦。。
有示例的代码就更好了。时间比较紧。
或者告诉我怎么找资料哦。。
#4
2楼给的链接里面不就有示例代码嘛
只不过看你那行代码貌似用的是CSocket,说实话,我从来不用
#5
对呀,我用的是CSocket啊,,是在MFC框架内使用的嘛。所以2楼的示例代码好像用不了呀。
你为什么不用CSocket呢?
#6
因为我不会用,而且我觉得也不好用
你这个地方需要用CSocket的异步版本CAsyncSocket的Connect函数,它会立马返回WSAEWOULDBLOCK错误(大概是这个样子的,记不清了),不要管它(如果是其它错误就要管一下),如果连接成功了OnConnect事件会被触发
过5秒以后你再过来判一下,如果5秒连不上(所谓5秒这个时间你可以自己定),你就可以认为连接失败了
看看,很麻烦吧,所以我不用它
你这个地方需要用CSocket的异步版本CAsyncSocket的Connect函数,它会立马返回WSAEWOULDBLOCK错误(大概是这个样子的,记不清了),不要管它(如果是其它错误就要管一下),如果连接成功了OnConnect事件会被触发
过5秒以后你再过来判一下,如果5秒连不上(所谓5秒这个时间你可以自己定),你就可以认为连接失败了
看看,很麻烦吧,所以我不用它
#7
可以放到线程中执行...
#8
确定?
#9
异步select connect.
#10
侦听肯定要放在线程去做的,要不然,界面会假死的。
#11
有道理。
#1
这个会有超时,因为客户端不知道服务端是否打开,可以开个线程等来做
#2
TCP默认的连接超时时间比较长。
而且socket连接默认的是阻塞模式,你可以讲其改为非阻塞模式,再计算超时。
http://blog.sina.com.cn/s/blog_4a6151550100xirf.html
而且socket连接默认的是阻塞模式,你可以讲其改为非阻塞模式,再计算超时。
http://blog.sina.com.cn/s/blog_4a6151550100xirf.html
#3
1,2楼的2个方法都很好,
有示例的代码就更好了。时间比较紧。
或者告诉我怎么找资料哦。。
有示例的代码就更好了。时间比较紧。
或者告诉我怎么找资料哦。。
#4
2楼给的链接里面不就有示例代码嘛
只不过看你那行代码貌似用的是CSocket,说实话,我从来不用
#5
对呀,我用的是CSocket啊,,是在MFC框架内使用的嘛。所以2楼的示例代码好像用不了呀。
你为什么不用CSocket呢?
#6
因为我不会用,而且我觉得也不好用
你这个地方需要用CSocket的异步版本CAsyncSocket的Connect函数,它会立马返回WSAEWOULDBLOCK错误(大概是这个样子的,记不清了),不要管它(如果是其它错误就要管一下),如果连接成功了OnConnect事件会被触发
过5秒以后你再过来判一下,如果5秒连不上(所谓5秒这个时间你可以自己定),你就可以认为连接失败了
看看,很麻烦吧,所以我不用它
你这个地方需要用CSocket的异步版本CAsyncSocket的Connect函数,它会立马返回WSAEWOULDBLOCK错误(大概是这个样子的,记不清了),不要管它(如果是其它错误就要管一下),如果连接成功了OnConnect事件会被触发
过5秒以后你再过来判一下,如果5秒连不上(所谓5秒这个时间你可以自己定),你就可以认为连接失败了
看看,很麻烦吧,所以我不用它
#7
可以放到线程中执行...
#8
确定?
#9
异步select connect.
#10
侦听肯定要放在线程去做的,要不然,界面会假死的。
#11
有道理。