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;
}
芙兰丶二小姐
9 years, 3 months ago