HTTP/1/1 400使用套接字保持活动连接中的错误请求
嗨,我从服务器上得到这个错误。这是使用隧道与外部IP的TCP套接字连接。我们从源IP向目标服务器IP端口发送请求。这是提供给我们的关于如何连接的信息 您的软件从客户端平台打开一个套接字以连接我们的服务器平台。 我们的服务器将通过启动“保持活动”对话框进行响应。 您的软件将发送一个X12传输数据包,其中包含一个合格请求。 我们的服务器将检查收件人的信息,并发送响应以允许或拒绝该资格 这是我的客户端代码,用于连接、发送和接收消息。有一件事我不确定。我做HTTP Post的方式。 他们给了我们一个样品要求。这就是它的样子HTTP/1/1 400使用套接字保持活动连接中的错误请求,http,tcp,Http,Tcp,嗨,我从服务器上得到这个错误。这是使用隧道与外部IP的TCP套接字连接。我们从源IP向目标服务器IP端口发送请求。这是提供给我们的关于如何连接的信息 您的软件从客户端平台打开一个套接字以连接我们的服务器平台。 我们的服务器将通过启动“保持活动”对话框进行响应。 您的软件将发送一个X12传输数据包,其中包含一个合格请求。 我们的服务器将检查收件人的信息,并发送响应以允许或拒绝该资格 这是我的客户端代码,用于连接、发送和接收消息。有一件事我不确定。我做HTTP Post的方式。 他们给了我们一个样品
POST /OKMMISPOS HTTP/5.1
Content-Length: 521
ISA*00*__________*00*__________*ZZ*500000330______*ZZ*731476619______*090303*1414*U*004
-------这是消息的X12内容-----------------
private void button1_Click(object sender, EventArgs e)
{
try
{
//create a new client socket ...
string szIPSelected = "127.0.0.1";
int szPort = 57000;
if (textBox1.Text != "")
szIPSelected = textBox1.Text;
if (textBox2.Text != "")
szPort = Int32.Parse(textBox2.Text);
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();
SendRequest(m_socClient);
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);
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}
private void SendRequest(Socket m_socClient)
{
string resource = "/OKMMISPOS";
var header = String.Format("POST {0} HTTP/1.1\r\n", resource);
String body = Query270;
byte[] bodyBytes = Encoding.ASCII.GetBytes(body);
header += "Content-Length: " + (body.Length + 1)+ "\r\n" + "\r\n";
string request = String.Concat(header,body);
textBox3.Text = request;
textBox3.Refresh();
byte[] requestBytes= Encoding.ASCII.GetBytes(request);
m_socClient.Send(requestBytes);
}
我的代码发送一个类似于他们的请求,但我收到一个HTTP 400错误请求。在wireshark上,请求使用TCP协议启动。这是wireshark的截图。HTTP 400。
也不确定这是否是imp,请求以TCP启动,响应以HTTP返回
要求
回应
是的,他们要求使用HTTP 5.1。所以我把这个字符串硬编码了。请参阅SendRequestsocket方法。Query270是一个简单的字符串。像这样ISA*00*00 ZZ*500000355*ZZ*734476619*130716*2207*^*00501*577840582*0*T:~GSHS*500000355*734476619*20130716*2207*088605*X*005010X279A1~ST*270*0001*005010X279A1~BHT*0022*13*635096092580180604*20130716您的SendRequestsocket方法当前使用HTTP/1.1。需要5.1是一个非常糟糕的体系结构,因为代理经常会在这上面呕吐。另外,请注意,真正的web服务器需要主机头。主机头可能是问题所在。将所需的headerPOST/OKMMISPOS HTTP/5.1 Content Length:bodybytes.Length分配给变量并连接正文是否正确。还是应该使用HTTPWebrequest类?。最后一个字符串“request”看起来像POST/OKMMISPOS HTTP/5.1 Content Length:bodybytes.Length/r/n/r/n我已经编辑了屏幕截图。这是serverlet我们的回应