我能';t使用Java{Closed}从Telnet发送超过1200字节的请求

我能';t使用Java{Closed}从Telnet发送超过1200字节的请求,java,telnet,Java,Telnet,我用java编写了一个简单的telnet应用程序,这个应用程序发送请求(xml)和读取响应。但当我发送的请求(来自java)超过1200字节时,我就得到了HTTP 500。如果我从命令行发送这个命令,我会得到HTTP200(Ok)。java中是否有最大大小限制 我的代码: public static void main(String[] args) throws IOException { Socket pingSocket = null; PrintWr

我用java编写了一个简单的telnet应用程序,这个应用程序发送请求(xml)和读取响应。但当我发送的请求(来自java)超过1200字节时,我就得到了HTTP 500。如果我从命令行发送这个命令,我会得到HTTP200(Ok)。java中是否有最大大小限制

我的代码:

    public static void main(String[] args) throws IOException {
        Socket pingSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            pingSocket = new Socket("host", 4380);
            out = new PrintWriter(pingSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(pingSocket.getInputStream()));
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }

        String newLine = "\n";
        String header = "POST /path HTTP/1.1" + newLine
                + "Host: host:4380" + newLine
                + "Authorization: Basic cuyasdyq123ha123" + newLine
                + "Connection: close" + newLine
                + "SOAPAction: \"\"" + newLine
                + "Content-Type: text/xml; charset=utf-8" + newLine
                + "Content-Length: 2000" + newLine;

        String request = "my xml data here";

        System.out.println(header + request);

        out.println(header);
        out.println(request);

        System.out.println(in.readLine());
        System.out.println();

        while (in.read() != -1) {
            System.out.print((char) in.read());
        }

        out.close();
        in.close();
        pingSocket.close();
    }

感谢您的帮助

这看起来像是编码问题。我不知道你从命令行得到了什么编码。如果使用windows,很可能是cp-1252。因此,您的1200个字符可能计算为1200字节,这符合您指定的2000个内容长度


但在Java中,每个字符都表示为两个字节。所以你的1200个字符变成了2400个字节;但是标题中的内容长度:2000使您的内容过早地被切断。

这看起来像是编码问题。我不知道你从命令行得到了什么编码。如果使用windows,很可能是cp-1252。因此,您的1200个字符可能计算为1200字节,这符合您指定的2000个内容长度


但在Java中,每个字符都表示为两个字节。所以你的1200个字符变成了2400个字节;但是标题中的内容长度:2000使您的内容过早地被切断。

当您收到HTTP 500时,请检查您的服务器日志,看看那里发生了什么。@Manish我收到了这个错误:无法创建StAX reader或writerHTTP 500错误。我将其值更改为(request2.length()+400),当您获得HTTP 500时,请检查您的服务器日志以了解那里发生了什么。@Manish我收到此错误:无法创建StAX reader或writerHTTP 500错误。我把它的值改为(request2.length()+400),我测试它写2400(然后写3000,…),但还是写http 500。在命令行中,我写“内容类型:text/xml;charset=utf-8”。我认为这不是内容长度的问题。那么,你是说即使内容长度为3000,限制似乎仍然是1200个字符(或大约1200个字符)?那么限制与内容长度的设置无关?你确定吗?输入的第1200个字符可能是StAX解析器不理解的吗?服务器提供的信息是否比您引用的一行多?如果内容长度无效,那么为什么我可以从命令行发送此命令?服务器不提供任何信息,服务器响应无法创建StAX读写器。正如我所解释的,内容长度计算字节,在Java中,当您写出
时。println
,您为每个字符输出两个字节;但是,您在命令行中使用的telnet应用程序很可能只为每个字符发送一个字节。不,您是不对的。这是网络问题。(Cisco,MTU大小)我测试它写2400(然后写3000,…),但还是写http 500。在命令行中,我写“内容类型:text/xml;charset=utf-8”。我认为这不是内容长度的问题。那么,你是说即使内容长度为3000,限制似乎仍然是1200个字符(或大约1200个字符)?那么限制与内容长度的设置无关?你确定吗?输入的第1200个字符可能是StAX解析器不理解的吗?服务器提供的信息是否比您引用的一行多?如果内容长度无效,那么为什么我可以从命令行发送此命令?服务器不提供任何信息,服务器响应无法创建StAX读写器。正如我所解释的,内容长度计算字节,在Java中,当您写出
时。println
,您为每个字符输出两个字节;但是,您在命令行中使用的telnet应用程序很可能只为每个字符发送一个字节。不,您是不对的。这是网络问题。(思科,MTU大小)