我通过socket连接传输,将字符串大小转成网络字节,然后将传输的字符串转成byte数组,那怎么把网络字节和byte数组相加传输呢,直接相加会出错的,请问这样传输对吗?请给出具体方法,有这方面经验的请帮帮忙啊,谢谢!
例:
public void getStr(){
String strSendXml = "<name id="name" value="aaaaaaa">";

byte[] size=toLH(strSendXml.length());
server=new Socket("197.0.0.17",8888);
PrintWriter out = new PrintWriter(server.getOutputStream());
out.println(size+strSendXml.getBytes());
out.flush();
}
//转成网络字节
public static byte[] toLH(int n) {   
  byte[] b = new byte[4];   
  b[0] = (byte) (n & 0xff);   
  b[1] = (byte) (n >> 8 & 0xff);   
  b[2] = (byte) (n >> 16 & 0xff);   
  b[3] = (byte) (n >> 24 & 0xff);   
  return b;   

解决方案 »

  1.   

    [code]
            byte[] message = "需要传输的字符串".getByte();
            int length = message.length;
            ByteBuffer buf = ByteBuffer.allocate(length + 4);
            buf.setAutoExpand(true);        byte[] lens = new byte[4];
            lens[0] = (byte) ((0xFF000000 & length) >> 24);
            lens[1] = (byte) ((0x00FF0000 & length) >> 16);
            lens[2] = (byte) ((0x0000FF00 & length) >> 8);
            lens[3] = (byte) (0x000000FF & length);        buf.put(lens);
            buf.put();        buf.flip();
    [/code]
      

  2.   

    out.println(size+strSendXml.getBytes()); 为什么要这样操作哦,直接发出去就可以的啊,
    String str = ".....";
    out.println(str);
      

  3.   

    1>.strSendXml.getBytes() 返回byte[], byte[]当然不能和 int类型的size相加
          可以分两次写:先写size, 再写strSendXml
                  PrintWriter out = new PrintWriter(server.getOutputStream()); 
                  out.println(size);
                  out.println(strSendXml.getBytes());2>.你为什么要转成网络字节,是要和其他语言比如C++通讯吗? 如果只是JAVA进程的通讯,不需要转成网络字节的, JAVA的SOCKET通讯会内部做掉,不象C++,需要自己转.
    3>.如果要和C/C++通讯,转的时候用PrintStream,PrintWriter会加入很多标识符, 
            
      

  4.   

    先把size数组发完,再发字符串,分两步走.
      

  5.   

    用字符流来处理字节,麻烦多多,
    你可以直接把strSendXml.length()发送出去.
      

  6.   

    //byte[] bs1;
    //byte[] bs2;
    ByteBuffer fullBuffer = ByteBuffer.allocate(bs1.length() + bs2.length);
    fullBuffer.put(bs1);
    fullBuffer.put(bs2);
    fullBuffer.flip();
    byte[] targetbs = fullBuffer.array();
      

  7.   

    bs1.length()  ==> bs1.length
      

  8.   

    在C++中,网络字节序也只有诸如整形等等的数值需要转换网络字节序,纯粹的ASCII字符串直接拷贝到char数组,Socket发送即可。对Java的的Socket发送/接收,使用适当的流套装,即可方便的发送/接收数据了。