1

我必须请求一个 URL,即“ http://192.168.220.12:5000”,java服务将在其中接收它,

以以下字符串为主体

<?xml version='1.0'?><!DOCTYPE svc_init SYSTEM 'ABCD.DTD'><svc_init ver='3.3.0'><hdr ver='3.3.0'><client><id>xxx</id><pwd>xxx</pwd></client></hdr><aaaa ver='3.3.0'><trans_id>1</trans_id><request_type type='2'/><l_hor_acc type='HIGH'/></aaaa></svc_init>

我可以在我的 Firefox 浏览器中使用 RESTClient 成功完成此操作,请参见下图: 在此处输入图像描述 但是当我通过以下 C# 代码发送它时,它给了我以下错误:

 java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(Unknown Source)
    at Creader.run(Creader.java:42)

C#代码如下:

xmlData= "<?xml version='1.0'?><!DOCTYPE svc_init SYSTEM 'ABCD.DTD'><svc_init ver='3.3.0'><hdr ver='3.3.0'><client><id>xxx</id><pwd>xxx</pwd></client></hdr><aaaa ver='3.3.0'><trans_id>1</trans_id><request_type type='2'/><l_hor_acc type='HIGH'/></aaaa></svc_init>";

address = "http://192.168.220.12:5000";

using (var client = new WebClient())
{
  client.UploadData(address , Encoding.ASCII.GetBytes(xmlData));
}

我在这里做错了什么?

我也尝试过,但没有任何效果。1) 使用另一种方法将 xmlData 转换为 byte []。2) 使用 Encoding.UTF8.GetBytes 而不是 Encoding.ASCII.GetBytes。3) 使用 client.UploadString(new Uri(mlcAddress), xmlData) 而不是 client.UploadData...

4

3 回答 3

0
            WebRequest request = WebRequest.Create("http://192.168.220.12:5000");
            request.Method = "POST";
            string xmlData= "<?xml version='1.0'?><!DOCTYPE svc_init SYSTEM 'ABCD.DTD'><svc_init ver='3.3.0'><hdr ver='3.3.0'><client><id>xxx</id><pwd>xxx</pwd></client></hdr><aaaa ver='3.3.0'><trans_id>1</trans_id><request_type type='2'/><l_hor_acc type='HIGH'/></aaaa></svc_init>";
            byte[] byteArray = Encoding.UTF8.GetBytes (xmlData);
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = byteArray.Length;
            Stream dataStream = request.GetRequestStream ();
            dataStream.Write (byteArray, 0, byteArray.Length);
            dataStream.Close ();
            WebResponse response = request.GetResponse ();
            dataStream = response.GetResponseStream();                
            StreamReader reader = new StreamReader (dataStream);
            string responseFromServer = reader.ReadToEnd ();
            reader.Close ();
            dataStream.Close ();
            response.Close ();
于 2012-08-27T06:41:57.640 回答
0

以下代码(TCP套接字)有效

oSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
                ProtocolType.Tcp);
System.Net.IPAddress oIPAddress = System.Net.IPAddress.Parse(ip);
System.Net.IPEndPoint oEndPoint = new System.Net.IPEndPoint(oIPAddress, port);
oSocket.Connect(oEndPoint);

Object oData = xmlData;
byte[] bData = System.Text.Encoding.ASCII.GetBytes(oData.ToString());
oSocket.Send(bData);
于 2012-09-04T08:39:42.087 回答
0

您需要比较您的代码和 REST 客户端发送的内容之间的在线字节数。REST 客户端可能在一个数据包中发送标头和正文,而 .NET 将请求标头与正文分开发送,这导致服务器抛出,因为它没有预料到这一点。

使用wireshark 来嗅探流量,或者如果这是本地主机,请在firefox 上使用Firebug,并为.net 创建一个system.net 跟踪日志。只需在谷歌上搜索“使用 system.net 进行跟踪”即可获取有关如何执行此操作的信息。

于 2012-10-19T07:14:01.930 回答