C# 错误:消息[来自HTTPUtil::getHttpRequest():要读取的字节数小于零?

C# 错误:消息[来自HTTPUtil::getHttpRequest():要读取的字节数小于零?,c#,C#,此代码向服务器发送请求。我正在使用终结点打开套接字。我的帖子内容长度有问题。我使用的不是HttpWebRequst,而是一个套接字(来自我们的客户端平台),它连接到他们的服务器平台。这是发送一个长字符串请求 Header = POST /OKMMIS HTTP/5.1 Request = header + content Content-length = content.length Content = @"ISA*00* *00* *ZZ*5000003

此代码向服务器发送请求。我正在使用终结点打开套接字。我的帖子内容长度有问题。我使用的不是HttpWebRequst,而是一个套接字(来自我们的客户端平台),它连接到他们的服务器平台。这是发送一个长字符串请求

Header = POST /OKMMIS  HTTP/5.1 
Request = header + content
Content-length = content.length
Content = @"ISA*00*          *00*          *ZZ*500000355      *ZZ*734476619      *130711*1023*^*00501*790719345*0*T*:~GS*HS*500000355*734476619*20130711*1023*273450*X*005010X279A1~ST*270*0001*005010X279A1~BHT*0022*13*635091349826842989*20130711*1023~HL*1**20*1~NM1*PR*2*Oklahoma Medicaid*****PI*734476619~HL*2*1*21*1~NM1*1P*2*Hillcrest Medical Center*****XX*1629057229~HL*3*2*22*0~TRN*1*20130711102317CDN266905*9CARDONHCN~NM1*IL*1*MESSNDREW*MARQUIS****MI*B10083667~REF*SY*323006707~DMG*D8*20100108*M~DTP*291*D8*20130512~EQ*30~SE*14*0001~GE*1*273450~IEA*1*790719345~";
调用
m_socClient.Send(requestBytes)
发送此消息

他们接收服务器日志时出现以下错误:

消息[来自HTTPUtil::getHttpRequest():要读取的字节数小于零???,req->headerLengh为49,req->contentLength为486,我们已经读取了537个字节

标头长度=51。内容长度=486。但是服务器读取539字节?我收到一个HTTP 400错误请求。这是来自服务器的响应

HTTP/1.1 400 Bad Request
Content-Length: 539

POST /OKMMISPOS  HTTP/5.1 
Content-Length: 486


ISA*00*          *00*          *ZZ*500000355      *ZZ*734476619      *130718*1129*^*00501*936078483*0*T*:~GS*HS*500000355*734476619*20130718*1129*326565*X*005010X279A1~ST*270*0001*005010X279A1~BHT*0022*13*635097437938418629*20130718*1129~HL*1**20*1~NM1*PR*2*Oklahoma Medicaid*****PI*734476619~HL*2*1*21*1~NM1*1P*2*Hillcrest Medical Center*****XX*1629057229~HL*3*2*22*0~NM1*IL*1*MARQUIS*****MI*B17993667~DMG*D8*20101208*M~DTP*291*D8*20130512~EQ*30~SE*12*0001~GE*1*326565~IEA*1*936078483~
我从哪里开始呢

//// create a new client socket ...
string szIPSelected = "127.0.0.1";
int szPort = 50050;
m_socClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
System.Net.IPAddress remoteIPAddress = System.Net.IPAddress.Parse(szIPSelected);
System.Net.IPEndPoint remoteEndPoint = new System.Net.IPEndPoint(remoteIPAddress, szPort);

m_socClient.Connect(remoteEndPoint);

if (m_socClient.Connected)
{
    toolStripStatusLabel1.Text = "Connected to " + szIPSelected + ":" + szPort;
    statusStrip1.Refresh();

    string resource = "/OKMMISPOS";
    var header = String.Format("POST {0}  HTTP/5.1 " + Environment.NewLine, resource);
    String body = @"ISA*00*          *00*          *ZZ*500000355      *ZZ*734476619      *130711*1023*^*00501*790719345*0*T*:~GS*HS*500000355*734476619*20130711*1023*273450*X*005010X279A1~ST*270*0001*005010X279A1~BHT*0022*13*635091349826842989*20130711*1023~HL*1**20*1~NM1*PR*2*Oklahoma Medicaid*****PI*734476619~HL*2*1*21*1~NM1*1P*2*Hillcrest Medical Center*****XX*1629057229~HL*3*2*22*0~TRN*1*20130711102317CDN266905*9CARDONHCN~NM1*IL*1*MESSNDREW*MARQUIS****MI*B10083667~REF*SY*323006707~DMG*D8*20100108*M~DTP*291*D8*20130512~EQ*30~SE*14*0001~GE*1*273450~IEA*1*790719345~";
    byte[] bodyBytes = Encoding.ASCII.GetBytes(body);
    header += "Content-Length: " + (bodyBytes.Length) + Environment.NewLine + Environment.NewLine + Environment.NewLine;
    string request = String.Concat(header, body);
    textBox3.Text = request;
    textBox3.Refresh();
    byte[] requestBytes = Encoding.ASCII.GetBytes(request);
    m_socClient.Send(requestBytes);
    toolStripStatusLabel1.Text = "Sending  Request to  " + szIPSelected + ":" + szPort;
    statusStrip1.Refresh();
}

Thread.Sleep(3000);

byte[] bytes = new byte[1024];
int bytesRec = m_socClient.Receive(bytes);

txtResponse271.Text = Encoding.ASCII.GetString(bytes, 0, bytesRec);

m_socClient.Disconnect(true);
m_socClient.Close();

“我从哪里开始?”-通过正确解释您试图执行的操作、代码的作用以及您试图理解此错误的原因。@CodeCaster:好的,完成..请提出建议。这是他们的服务器,询问他们的代码为何显示此错误。为什么不使用.NET framework中的http客户端?您的请求发送
http/5.1
,而您缺少
主机头。此外,还可以不调用
Thread.Sleep()
,而是继续调用
socket.receive()
,直到它返回一个指示传输结束的值(例如
0
)。我没有丢失主机头。它们不需要。这是一个隧道。只能使用一个端口发送接收。我的套接字使用该IP和端口作为终结点。我的客户端代码就是问题所在。然后您仍然需要做一些解释。:-)您连接到哪种服务器?它不是HTTP/1.1服务器吗?那么我们不可能知道w他们期望的消息格式以及他们的服务器抛出您显示的错误的原因。他们是否明确告诉您不要发送主机头?他们没有示例代码?您所说的“内容长度有问题”是什么意思?例如,您能看到您发送的确切内容吗?为什么要附加三个换行符?您确定
环境。换行符
包含
“\r\n”