各位大虾:
   我的方法如下:
     byte b[] = new byte[2];
    b[0] = (byte) (n >> 8);
    b[1] = (byte) n;
    return b;
  我把b[]转换成String通过socket传到客户端后,客户端受到的 数据有的正确,有的不正确,不知道哪里出错了???
  请指点。
 
  如:(short)9999 ->发送 -〉接受正常
      (short)1234 ->发送-〉接受不正常 

解决方案 »

  1.   

    答:不明白你要问的到底是什么?若仅仅是通过网络正确传递数据,你就将byte[]数据块直接传递即行了。若是要传递short,则用DataOutputStream流,通过dos.writeShort(short值)向网络直接写就行了。
      我不明白你的真正意图。
      

  2.   

    short to byte:
    byte[] b = new byte[2];
    b[0] = (byte)((n & 0xFF00) >> 8);
    b[1] = (byte)(n & 0xFF);byte to short:
    n = (short)(((b[0] < 0 ? b[0] + 256 : b[0]) << 8) + (b[1] < 0 ? b[1] + 256 : b[1]));
      

  3.   

    谢谢两位。
     to powerless2008:
     我用你的方法,将(short)1235传过去,对方得到的是1087。
      to jiangnaisong:
      我的主要目的是求一个将short 不失精度的转换为byte[]的方法。因为我上面的方法进行转换后,对方得到的值有的正常,有的不正常。
      

  4.   

    答:你的真正目的是不是:通过网络传递short的值?若是:则不用转换成byte[],直接用DataOutputStream中的dos.writeShort(short值)即行了。若不是:就是要转成byte[],则:你的代码2楼的代码都是正确的!你好检查一下对方程序的网络接收部分的代码。以上仅供你参考
      

  5.   

    答:或者是:先检查一下对方接收到的字节byte[]数据对不对,然后再查:由byte[]转换成short对不对。这样问题应该能解决了。
      

  6.   

    谢谢 jiangnaisong
       照你说的,我用了DataOutputStream ,之前我用的是PrintWriter。
       dos.writeShort()可以让short正确传送,但有新问题:
       我有一个报文,格式 消息头  int(4byte)+int(4byte)+short(2byte) 
                       消息体   msgid(string 24) + result(string 1)
       为用DataOutputStream进行传送,对于 int(4byte)+int(4byte),我直接用dos.writeBytes();
       对于 short(2byte),我用dos.writeShort()
       对于消息体,我用 dos.writeBytes(消息体串,如:"200820082008200820082008" +"1" )
       发送的demo 如:
       dos.writeBytes(...);
       dos.writeShort(s);
       dos.writeBytes(...);
       对方socket接收后,发现消息体内容有时正常,有时异常,这是为何?是不是dos这样发送同一报文的不同部分,不正确阿?请执教
      

  7.   

    我想知道你在接收到这个字节数组以后,是怎么还原成一个short类型的数的。
      

  8.   


    答:没有问题。如:
    dos.writeInt(int值);//4个字节
    dos.writeInt(int值);//4个字节   dos.writeShort(s); //2个字节
       dos.writeUTF(串);
    对方收时用:DataInpuutStream流不相应读取就行了。
     
      

  9.   

    谢谢各位。to joejoe:
     我的方法是:short seq = (short) ( ( (0x000000FF & b3[0])<<8) | ( 0x000000FF & b3[1])   ); 
     这是我测试了好久才得到的正确方法。对方用c语言发送的short类型。
    to jiangnaisong:
    对方socket client端是已经写好的(linux c),我方控制不了。
    我用
       dos.writeInt(int值);//4个字节 
       dos.writeInt(int值);//4个字节 
       dos.writeShort(s); //2个字节 
       dos.writeUTF(串); 方式发送给他,
       dos.writeInt(int值);//4个字节 
       dos.writeInt(int值);//4个字节 
       dos.writeShort(s); //2个字节 
    没问题,但dos.writeUTF(串); 发送的消息体有时对方接受正常,有时不正常,也不知道为啥。
      

  10.   

    我测试了多次,发现用dos.writeUTF,dos.writeBytes,dos.writeChars去传送报文体,都有问题,
    但printwriter的println方法没有问题,所以现在我得用
    dos.writeInt();
    dos.writeInt();
    dos.writeShort();
    去发送报文头;
    用printWriter.println()去发送报文体,很麻烦,有好办法嘛?
      

  11.   


    答:dennyjava兄弟,你早点讲一下是java与对方c之间通信,我们就更能早点解决问题了。
    消息体传送:
    如:String messageBody="你好吗?";
    则发送用(对方用c来收):
      dos.write(messageBody.getBytes("GBK"));//或对方linux c能正确认识的字符编码以上仅供你参考
      

  12.   

    谢谢jiangnaisong,问题解决,结贴