以下是代码:
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,这个代码哪里有问题吗?
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,这个代码哪里有问题吗?
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
将这段代码:
-------------------------
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就不行。郁闷啊……