用C#实现HTTP协议,返回值总是Bad Request,大家帮忙看看

iyond 2005-10-20 02:41:43
以下是代码:
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,这个代码哪里有问题吗?
...全文
611 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
iyond 2005-10-20
  • 打赏
  • 举报
回复
找到原因了:是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就不行。郁闷啊……
iyond 2005-10-20
  • 打赏
  • 举报
回复
谢谢楼上了。我实在找不到原因。我甚至写了一个WebServer,来获得IE请求的是什么,结果跟我程序里的一样。为什么IE就行,我的程序就不行?难道IIS有歧视不成?
自由程序员 2005-10-20
  • 打赏
  • 举报
回复
顶一下,希望楼主尽快得到答案
iyond 2005-10-20
  • 打赏
  • 举报
回复
忘了,以下是发出的请求:

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

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧