以下是代码:
IPAddress addr = null;
try
{
  addr = IPAddress.Parse(this.tbIp.Text.Trim());
}
catch
{
  addr = Dns.GetHostByName(this.tbIp.Text.Trim()).AddressList[0];
}TcpClient tc = new TcpClient();
tc.Connect(new IPEndPoint(addr,Convert.ToInt32(this.tbPort.Text.Trim())));NetworkStream nws = tc.GetStream();
StreamWriter sw = new StreamWriter(nws,System.Text.Encoding.UTF8);
sw.Write(strCommand);
sw.Flush();string strRecived = "";if(nws.CanRead)
{
  MemoryStream ms = new MemoryStream();  byte[] bufferRecv = new byte[1024];
  int nRecv = 0;  while(true)
  {
    if(nws.DataAvailable)
    {
      try
      {
        while(true)
        {
          nRecv = nws.Read(bufferRecv,0,bufferRecv.Length);
          ms.Write(bufferRecv,0,nRecv);          if(nRecv == 0)
            break;
        }
      }
      catch(Exception err)
      {
        //读取错误
      }      break;
    }
  }  ms.Seek(0,SeekOrigin.Begin);
  StreamReader sr = new StreamReader(ms,System.Text.Encoding.UTF8);
  strRecived = sr.ReadToEnd();
  sr.Close();
  if(ms != null)
    ms.Close();
  
  nws.Close();
}if(sw != null)
  sw.Close();if(tc != null)
  tc.Close();------------------
返回值总是Bad Request,这个代码哪里有问题吗?

解决方案 »

  1.   

    忘了,以下是发出的请求:GET / HTTP/1.1
    Accept: */*
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; Maxthon; .NET CLR 1.1.4322)
    Host: 127.0.0.1
    Connection: Keep-Alive
      

  2.   

    谢谢楼上了。我实在找不到原因。我甚至写了一个WebServer,来获得IE请求的是什么,结果跟我程序里的一样。为什么IE就行,我的程序就不行?难道IIS有歧视不成?
      

  3.   

    找到原因了:是StreamWriter的原因,
    将这段代码:
    -------------------------
    StreamWriter sw = new StreamWriter(nws,System.Text.Encoding.UTF8);
    sw.Write(strCommand);
    sw.Flush();
    -------------------------
    换成:
    -------------------------
    byte[] bufferSend = System.Text.Encoding.UTF8.GetBytes(strCommand);
    nws.Write(bufferSend,0,bufferSend.Length);
    nws.Flush();
    -------------------------
    我觉得原因是:用StreamWriter时,它会在数据的头上加上一个特殊的标记,导致Web服务器无法识别。不过用HttpWebRequest时却一定要用StreamWriter,直接GetBytes就不行。郁闷啊……