java - 字节数组消息在发送时被分割。我想一次性发送请求消息

标签 java

使用java socket编程,发送字节数组。字节数组大小为 3500。它不是作为单个请求发送,而是在网络捕获时分为 3 个请求。所以服务器无法处理分割的请求。我想一次性发送请求。下面找到用于发送字节数组请求的代码片段。

        byte[] bISOMsg = new byte[9000];
        bISOMsg = isoMsg.pack();


        int messageLength = (short)bISOMsg.length;
        messageLength = messageLength - 16;

        /*  System.out.println("messageLength  -->  " + messageLength);
    System.out.println("Header  -->  " + new String(isoMsg.getHeader()));*/

        byte[] bHeaderLen = new byte[2];
        ByteBuffer bbHeader = ByteBuffer.wrap(bHeaderLen);
        bbHeader.putShort((short)messageLength);
        isoMsg.setHeader(bbHeader.array());
        bISOMsg = isoMsg.pack();

        isoMsg.unpack(bISOMsg);
        logISOMsg(isoMsg);

        System.out.println("bISOMsg....."+new String(bISOMsg));


        byte[] BitmapBytVal= new byte[32];

        System.arraycopy(bISOMsg, 4,BitmapBytVal, 0, 32);
        //System.out.println("BitmapBytVal..."+BitmapBytVal);


        ByteArrayOutputStream outputStream1 = new ByteArrayOutputStream();
        outputStream1.write(isoHeader.getBytes());
        outputStream1.write(bISOMsg, 0,4);
        outputStream1.write( HexToByte1(new String(BitmapBytVal)));
        outputStream1.write(bISOMsg, 36, bISOMsg.length-36);
        TotalMsgBytVal  =outputStream1.toByteArray();
        outputStream1.close();

        System.out.println("TotalMsgBytVal Hex value="+TotalMsgBytVal);

        System.out.println("Msg Length ---- " + TotalMsgBytVal.length);
        String msgLength= Integer.toHexString(TotalMsgBytVal.length);
        msgLength =  addZeros(msgLength,4);
        System.out.println("Msg Length ----: " + msgLength);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream( );
        String MSGIndicater="03NPCI ONC";
        outputStream.write(MSGIndicater.getBytes());
        outputStream.write(HexToByte1(msgLength));
        outputStream.write(TotalMsgBytVal,0,TotalMsgBytVal.length);
        outputStream.close();

        TotalMsgBytVal = outputStream.toByteArray();

        Socket  soc = null;
        byte []dataRes = new byte[9000];

        System.out.println("Gateway IP Address ="+ cbsipaddr);
        System.out.println("Gateway Port ="+ cbsport);

        soc= new Socket(cbsipaddr,cbsport);

        in=soc.getInputStream();
        /*
        /* Added by Syed on 03/09/15 */
        System.out.println("Total Length of Request is = "+ TotalMsgBytVal.length);
        DataOutputStream dout = new DataOutputStream(soc.getOutputStream());
        dout.writeInt(TotalMsgBytVal.length); // write length of the message
        dout.write(TotalMsgBytVal);     // write the message
        Thread.sleep(1000);
        dout.flush();

最佳答案

嗯,以太网的 MTU 约为 1500 字节。

当您尝试通过以太网写入 3500 字节时,您认为会发生什么?

您的代码看起来也很时髦,我认为您应该查看现有的实现以了解如何改进您的代码。如果它无法处理分成多个数据包的消息,那么它就是一个非常糟糕的服务器。

关于java - 字节数组消息在发送时被分割。我想一次性发送请求消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32376401/

相关文章:

java - 无法使用 JSON 和 JQuery 显示从 Spring MVC Controller 返回的响应

java - 具有非数字键的 PHP 数组的 Java 等价物是什么?

java switch case无法解析为变量

java - 解决错误java.io.StreamCorruptedException : Inconsistent vector internals

java - ArrayList不包含字符串

java - 用什么来存储可以查询的序列化数据?

java - WAR文件从外部文件接收数据的最佳方式

java - 获取 ImageReader 解析 DICOM 图像时出错

java - 我在 Java 迭代器中的代码有什么问题

java - 比较二维数组中的 2 个元素