我做的是类似QQ的聊天代码,我的服务器端数据库保存的用户信息中包括SOCKET(数据库中的定义是INT),该SOCKET的存入时机不是在accept时,是用的WPARAM参数(不解释了,大虾一定知道的),但与客户端联系时,从数据库中取出该socket,用其向客户端发消息时,客户端却怎么也收不到消息,怎么回事呢?
还有在connect后调用send服务器端收不到消息,必须在connect和send之间使用Sleep(100),不知为什么?
模型是WSAAsyncSelect模型。
还有在connect后调用send服务器端收不到消息,必须在connect和send之间使用Sleep(100),不知为什么?
模型是WSAAsyncSelect模型。
2.“connect和send之间使用Sleep(100)”如果我的理解没错的话,你的意思是你connect之后靠sleep来等网络建立成功?你挂公网上试试看你还能不能成功。WSAAsyncSelect模型看名字就是异步的,你没收到FD_CONNECT的时候,根本谈不上发送,并且看来你也没有检查Send的返回值,不是你说Send多少它就能马上发出并且发出多少的,异步的你要检测Send返回值是不是EWOULDBLOCK等等情况进行相应的操作,详见MSDN
2.你的socket是异步的吧,这样connect后需要等连接成立,在没有建立前发送当然就收不到了.
accept返回一个socket直接加入一个objectList中就可以了。
3L的建议非常好,同时我认为你要检查connect send的返回值,可能是connect or send 就没有成功,这样肯定收不到数据,debug调试一下吧
2.你是不是非阻塞模式,马上返回,还没有连接成功
看socket的值是否有效