用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,这个代码哪里有问题吗?
...全文
677 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
内容概要:本文提出了一种基于MS-TCN-TiDE的多尺度时序融合模型,用于解决周尺度电力负荷预测问题。该模型创新性地融合了多尺度时序卷积网络(MS-TCN)与时间深度编码器(TiDE),通过多层次膨胀卷积结构有效捕捉电力负荷序列中的局部波动与长期趋势等多尺度时序特征,并采用稠密编码器架构深度融合历史负荷、气象条件、日历信息等多源异构数据。模型支持直接多步预测,避免了传统递归预测带来的累积误差。研究详细阐述了模型的整体架构设计、输入输出序列处理方式、特征工程方法及优化训练策略,并基于真实电力数据集完成了完整的Python代码实现与实验验证。结果表明,该模型在中长期负荷预测任务中相较ARIMA、LSTM、TCN等基准模型展现出更优越的预测精度与鲁棒性,尤其在应对负荷剧烈波动场景时表现突出。; 适合人群:具备一定Python编程基础和深度学习背景的研究生、科研人员及电力系统领域从事负荷预测、能源管理相关工作的工程师。; 使用场景及目标:①应用于电力系统调度、能源管理系统、电网规划等领域的中长期负荷预测任务,为电力供需平衡与运行决策提供数据支持;②为研究者提供一个结构清晰、代码可复现的先进负荷预测模型框架,促进时序深度学习模型在能源预测领域的应用、改进与学术交流; 阅读建议:建议读者结合提供的完整Python代码进行实践操作,深入理解MS-TCN的层级扩张卷积机制与TiDE的稠密编码解码结构的设计精髓,并可通过更换不同的数据集、调整模型超参数或引入新的特征变量,进一步探索模型的泛化能力与优化空间。

111,128

社区成员

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

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

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