回 帖 发 新 帖 刷新版面

主题:[讨论]询问一个有关使用winsock API实现异步SOCKET客户端的编程实例

[em18]
    我现在正在做一个ftp客户端,全部都是使用winsock api实现的,可是现在问题出在send以后立即使用recv,如果不能及时接收到反馈信息,则整个进程都被挂起。
    我现在知道应该使用异步socket实现,可是不知道该如何实现,烦请大侠们指点指点,能给出实例更好,先谢谢了!
    另外,顺带询问一下,如何实现多线程下载!

回复列表 (共4个回复)

沙发

用个缓冲流

板凳


异步方法使用 ioctlsocket() 设置 socket 为非组塞模式,当设置为
非组塞模式时,要返回 WSAEWOULDBLOCK 错误,这是正常的,你需要
WSAGetLastError() 得到后按照正常方式处理。还有你 recv() 既然
等待了,就说明组塞了,你可以使用 WSAxxxSelect() 或者 select()
模型判断 socket 是否可读,如可读的话再去接受。不见得非要设置
socket 为非组塞模式。如果一组塞就改异步的,那别人还没法用组塞
方式写 socket 程序了。

3 楼

可是因为我在类当中得到的消息又需要送到对话框相应的位置及时显示出来,这个时候我又如何让我的对话框知道有这么一个消息过来了呢
谢谢啊

4 楼

我在你另一个帖子里回了,这个跟你上面提的那个技术问题不相关了。主要是在于
你的设计。packet 都得到了,显示还不好办么?

我来回复

您尚未登录,请登录后再回复。点此登录或注册