C#无法从传输连接中读取数据:远程主机强迫关闭了一个现有的连接

.Net技术 码拜 8年前 (2016-02-29) 2909次浏览
C#无法从传输连接中读取数据:远程主机强迫关闭了一个现有的连接
堆栈信息:在 System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size)
现在有两个问题想讨教一下:
1、这个问题到底是怎么引起的(本人当前程序是做一个大量网址访问的功能,访问方式是GET,方法是利用大量线程去访问不同的网站)
2、有没有比较好的类,或源码推荐,能够让本人快速获取到网站源码就行了!
(感谢大家的帮助,在C#的路上能够有大家的帮助非常感动!)
解决方案

40

使用第三 方dll: NUniversalCharDet.dll
/// <summary>
/// 获取网页源代码
/// </summary>
private void GetUrlPageSource()
{
string url = Request[“url”];
string result = string.Empty;
if (!string.IsNullOrEmpty(url))
{
HttpWebResponse response;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch
{
result = “网页获取错误!”;
return;
}
if (response.StatusCode == HttpStatusCode.OK)
{
Stream responseStream = response.GetResponseStream();
MemoryStream stream2 = new MemoryStream();
int count = 0;
byte[] buffer = new byte[0x200];
while ((count = responseStream.Read(buffer, 0, 0x200)) > 0)
{
stream2.Write(buffer, 0, count);
}
response.Close();
if (stream2.Length > 0L)
{
stream2.Seek(0L, SeekOrigin.Begin);
byte[] buffer2 = new byte[stream2.Length];
stream2.Read(buffer2, 0, buffer2.Length);
stream2.Seek(0L, SeekOrigin.Begin);
int num2 = 0;
byte[] buffer3 = new byte[0x1000];
UniversalDetector detector = new UniversalDetector(null);
while (((num2 = stream2.Read(buffer3, 0, buffer3.Length)) > 0) && !detector.IsDone())
{
detector.HandleData(buffer3, 0, buffer3.Length);
}
detector.DataEnd();
if (detector.GetDetectedCharset() != null)
{
result = Encoding.GetEncoding(detector.GetDetectedCharset()).GetString(buffer2);
}
}
}
}
OutPut(OutPutType.html, result);
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C#无法从传输连接中读取数据:远程主机强迫关闭了一个现有的连接
喜欢 (0)
[1034331897@qq.com]
分享 (0)