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; }

.net socket asp.net

芙兰丶二小姐 9 years, 3 months ago

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

Senoya answered 9 years, 3 months ago

Your Answer