阻塞式 Socket 为什么会出现10035错误: 无法立即完成一个非阻挡性套接字操作

jeffzhch 2008-10-19 04:14:54
我用C#的套接字创建了一个TCP连接下载网页,默认的Socket应该是阻塞式的,而且我在其他地方也没有更改过。先开始正常,但是过一段时间像下面的Receive方法就会抛出10035错误:无法立即完成一个非阻挡性套接字操作,但应该还是阻塞式的socket啊... 望达人指点一二 ~谢过哈


while ((nBytes = m_Socket.Receive(ReceiveBuffer, 0, s_ContentBufferSize, SocketFlags.None)) > 0)
{
nTotalBytes += nBytes;
strResponse += s_DefaultEncoding.GetString(ReceiveBuffer, 0, nBytes);

if (m_ContentLength > 0 && nTotalBytes >= m_ContentLength)
break;
}
...全文
3032 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
realali 2010-03-01
  • 打赏
  • 举报
回复
两个Receive之间加上sleep(1000)试试。
zhscnd 2009-02-24
  • 打赏
  • 举报
回复
我的问题解决了,你看一下下面这个网址,对你应该有帮助
http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/726b9516-0ccd-40e1-829f-2fd5998904d4
zhscnd 2009-02-13
  • 打赏
  • 举报
回复
偶也遇到这个问题了,还是没解决
怎么办啊,郁闷中~~~~~~~~~~
  • 打赏
  • 举报
回复
差不多的问题
jeffzhch 2008-10-19
  • 打赏
  • 举报
回复


啊?没人......
上个图,就是这样的error... 郁闷了

期待达人...
jeffzhch 2008-10-19
  • 打赏
  • 举报
回复
另外补充几点...
1. 程序是多线程,一般为10~20下载线程

2. 没用C#自身封装的HttpWebRquest和HttpWebResponse是因为在之前用的时候多线程下载发现速度很慢,经常阻塞在下载过程中,后来发现HttpWebRquest的GetResponse调用过程中是同步的(反汇编显示lock(this){...}),每次只有一个线程连接和下载... 所以就自己用socket重新实现了一下

3. 一般来说在系统内部socket的send和recieve做的工作其实只是把数据传输(Copy)到TCP/IP协议栈的输出缓冲区或者从中读取数据,但是对于非阻塞的socket在send时遇到缓冲区满或者recieve是没有数据才会引发10035 error啊。。。 我这里用的应该是默认的blocking的套接字... 系统也不会更改这个属性吧?那怎么会在接收时也收到10035 WSAEWOULDBLOCK 这个异常呢?

望达人指点一二... 分数送上哈,谢了
jeffzhch 2008-10-19
  • 打赏
  • 举报
回复 1
我看过了...类似的也看了很多
但是问题的关键是,我用的是阻塞的socket... 在接收时,开始正常,但稍后就会出现10035异常.....是阻塞模式(blocking == true)的socket...为什么?呢?
孤剑 2008-10-19
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20030522/23/1821674.html

唉,发问题前先 看看 FAQ
jeffzhch 2008-10-19
  • 打赏
  • 举报
回复
顶一下。。。。。。。。。。。
jeffzhch 2008-10-19
  • 打赏
  • 举报
回复
顶一下,没人遇到过吗?
我在网上搜了一下,但是还是没有解决问题?这个阻塞的socket为什么会10035错误? 怎么解决呢?
lupanlupan 2008-10-19
  • 打赏
  • 举报
回复
帮顶

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧