socket.Receive 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败

问题描述:
在使用socket获取网页HTML的时候,经常出现这样的错误,
实在是不知道为什么?

多次测试也找不到原因,
今天在本地搭建了一WEB服务器,然后使用Socket 获得http://localhost/ 返回的内容,依然出现了下面的错误。

而使用浏览器来访问 http://localhost/ 的时候一切都是正常的。

这就很奇怪。

在 socket.Receive(buffer, 0, Buffer_Size, SocketFlags.None); 的时候发生

异常:已引发: "由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。"
(System.Net.Sockets.SocketException) 引发了一个
System.Net.Sockets.SocketException:
"由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。" 时间: 2015/6/25 21:29:42 线程:
<无名称>[10136]


List<byte> ReceiveAllData(Socket socket) { int zero_times = 0; int zero_max = 3; List<byte> list = new List<byte>(); int nowContentLength = 0; byte[] buffer = new byte[Buffer_Size]; while (true) { //此处经常出现错误,搞不懂 int receiveCount = socket.Receive(buffer, 0, Buffer_Size, SocketFlags.None); if (receiveCount > 0) { zero_times = 0; for (int i = 0; i < receiveCount; i++) { list.Add(buffer[i]); } nowContentLength += receiveCount; } if (receiveCount == 0) { zero_times++; if (zero_times >= zero_max) { break; } } } return list; } public HttpData GetData(Socket socket) { List<byte> list_data = ReceiveAllData(socket); ///其它代码。。。。。。。 return null; } public HttpData GetData(IPEndPoint address, byte[] headersData) { HttpData data = null; using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) { socket.ReceiveTimeout = receiveTimeout; socket.SendTimeout = sendTimeout; int loopTimes = 0; int loopTimesMax = 2; loop: if (!socket.Connected) { socket.Connect(address); } if (!socket.Connected) { loopTimes++; if (loopTimes < loopTimesMax) { goto loop; } } if (socket.Connected) { socket.Send(headersData); data = GetData(socket); socket.Shutdown(SocketShutdown.Both); } } return data; }
阅读 12k
1 个回答

我有个疑惑localhost是个文件吗?还是它自动访问了localhost/index.html或者localhost/default.html
你打开F12看看确认你访问的地址是否跟你的Socket一样

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Microsoft
子站问答
访问
宣传栏