C# 带套接字的GET请求返回损坏的数据

C# 带套接字的GET请求返回损坏的数据,c#,sockets,C#,Sockets,我的插座有问题。我使用以下代码发出GET请求: using (s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) { s.Connect(host, 80); string requestS = "GET http://" + adress + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "User-A

我的插座有问题。我使用以下代码发出GET请求:

using (s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
    s.Connect(host, 80);
    string requestS =
    "GET http://" + adress + " HTTP/1.1\r\n" +
    "Host: " + host + "\r\n" +
    "User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0\r\n" +
    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" +
    "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3\r\n" +
    "Accept-Encoding: gzip, deflate\r\n" +
    "Connection: close\r\n\r\n";
    Byte[] bytesSent = Encoding.UTF8.GetBytes(requestS);
    Byte[] bytesReceived = new Byte[1000];
    s.Send(bytesSent, bytesSent.Length, 0);
    int bytes = 0;

    do
    {
        bytes = s.Receive(bytesReceived, bytesReceived.Length, 0);
        page2 += Encoding.UTF8.GetString(bytesReceived, 0, bytes);
        m.Write(bytesReceived, 0, bytes);
    }
    while (bytes > 0);

}
以下是我从远程服务器获得的信息:

HTTP/1.1 301 Moved Permanently
Date: Sat, 07 Mar 2015 10:02:48 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
X-Pingback: http://www.example.com/blog/xmlrpc.php
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
Location: http://www.example.comhttp/www.example.com/somescript.php
Content-Length: 3
Connection: close
Content-Type: text/html; charset=UTF-8

如您所见,位置数据已损坏,我不知道如何解决此问题。

我在这里没有看到任何可能导致此问题的内容。中断的UTF-8处理(如注释中所述)不会对该错误起作用,因为这里的所有字符都是ASCII字符


问题出在别的地方。使用Fiddler确保
位置
标头未被无效发送。或者,后置可执行复制代码。目前,这是所有可以诊断的问题。

看来问题出在
地址
主机
-但我们无法分辨这些是什么,这使得很难帮助。一个简短但完整的程序演示这个问题会让你更容易得到帮助。主机和地址的价值是什么?此外,你有什么理由试图在这里重新发明轮子吗?
HttpClient
WebClient
WebRequest
有什么问题?您的
page2
代码有可能在两个连续的
Receive
调用之间分割多字节UTF-8字符,导致它被解码为两个垃圾字符。请尝试在循环之外进行UTF8解码