Connect()是不是在服务器端调用Accept()后才会返回TRUE?
小弟初学CSocket,服务器端Accept()好像调用成功了,可是客户端Connect()没有返回TRUE,很迷茫.....PS:这个问题应该很简单吧,5分算了...
小弟初学CSocket,服务器端Accept()好像调用成功了,可是客户端Connect()没有返回TRUE,很迷茫.....PS:这个问题应该很简单吧,5分算了...
解决方案 »
- 数据库执行修改操作,关闭数据库出错了
- 如何自定义slider(有背景)
- 帮看下,这个错误是怎么回事呢?
- 如何模糊图片
- CAsyncSocket UDP接收不到数据?急~~~
- 急诊:First-chance exception in TTY.exe(NTDLL.DLL)BxC0000008:Invalid Handle
- 小弟下载了一个生成图表的SDK开发包,可是发现该SDK一显示中文就出现乱码,英文良好,我将工程设置中资源语言改为中国也无效,我该怎么办?
- CListCtrl普遍的问题
- 在asynchronize winsock中的notification 通知里面,能否 new 新的内存
- 一个课后习题,求高手指点!
- 子窗体向父窗体传递变量的问题
- 一个关于CString对象的拷贝问题
具体查下msdn吧,记不清了。
connect(...)
Return Values
If no error occurs, connect returns zero. Otherwise, it returns SOCKET_ERROR, and a specific error code can be retrieved by calling WSAGetLastError.On a blocking socket, the return value indicates success or failure of the connection attempt.With a nonblocking socket, the connection attempt cannot be completed immediately. In this case, connect will return SOCKET_ERROR, and WSAGetLastError will return WSAEWOULDBLOCK.如果阻塞模式,connect返回0表明成功,返回非0则connect失败;
如果非阻塞模式,connect是异步的,当前的返回值SOCKET_ERROR并不代表connect的结果,你需要在异步事件里面判断connect是否成功,或者用select来判断连接是否成功。
Return Value
Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError. If this indicates an error code of WSAEWOULDBLOCK, and your application is using the overridable callbacks, your application will receive an OnConnect message when the connect operation is complete.
为什么不一样...
那服务器端的Accept()是用来干什么的 ?
accept server side: accept connect request from client sides.
也就是服务端accept以后,你的客户端会在阻塞模式下connect返回0,非阻塞模式下客户端可能会收到异步的链接成功时间或者select得到结果。
而原socket继续保持侦听。// 该函数堵塞等待客户的连接
g_hSockTK = accept(g_hSocket, NULL, NULL);
if (g_hSockTK == SOCKET_ERROR)
{
TRACE("Accept Error: %d\n",(error = WSAGetLastError()));
return 1;
}