jerrywang1992 2015-01-19 06:16 采纳率: 0%
浏览 3012

Android系统socket通信字节乱码。

编写了android socket通信的软件,可以和主机通讯互相收发数据。但是一个字节的数据超过0x80就会乱码,也就是说如果数据小于128,那么正常超过就会乱码。请问这是哪里有问题。我确认硬件没有问题,换了设备也是可以的。

 public class Tcp40Activity extends Activity {
    /** Called when the activity is first created. */
    Button   BnSend; 
     EditText EtSend; 
     TextView TvRev ; 

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            BnSend = (Button) findViewById(R.id.BnSend);//得到布局中的按钮引用
            EtSend = (EditText) findViewById(R.id.MsgText);
            TvRev  = (TextView) findViewById(R.id.RevText);
            BnSend.setOnClickListener(BnSendListen);
        }


        private View.OnClickListener BnSendListen=new View.OnClickListener() {
          public void onClick(View v) {
       // TODO Auto-generated method stub
       char[] a  ={0xF1,0x03,0x10,0x00,0x00,0x08,0x54,0x3C};
       String str =String.valueOf(a);//String.copylueOf(a);

       Socket s=null;
       DataOutputStream dout=null;
       DataInputStream  din =null;
       try 
       {
        s    =new Socket("192.168.1.1",8080);
        dout =new DataOutputStream(s.getOutputStream());
        din  =new DataInputStream (s.getInputStream());
        Thread.sleep(50, 0);                             //实际中刚连上后发数据需要一定延时  确保双方链接初始化完成
        dout.writeBytes(str);
        dout.flush();                                    //刷新缓存 发送数据
        /*50秒内等待反馈*/

        for(int i=0;i<100;i++)
        {
         if(din.available()>0)
         {
          byte[] buffer=new byte[din.available()];
          System.out.println(din.available());
          din.read(buffer);
          TvRev.setText("服务器发来的消息:"+str2HexStr(new String(buffer)));

             break;
         } 
         else Thread.sleep(500, 0);
        };

       }
       catch(Exception e)
       {
        e.printStackTrace();
       }
       finally
       {
        try{
         if(dout != null){
          dout.close();
         }
         if(din != null){
          din.close();
         }
         if(s != null){
          s.close();
         }     
        }
        catch(Exception e){
         e.printStackTrace();
        }
       }
      }
        };    
      //16进制转换的显示测试
      public static String str2HexStr(String str)    
        {      
            char[] chars = "0123456789ABCDEF".toCharArray();      
            StringBuilder sb = new StringBuilder("");    
            byte[] bs = str.getBytes();      
            int bit;      

            for (int i = 0; i < bs.length; i++)    
            {      
                bit = (bs[i] & 0x0f0) >> 4;      
                sb.append(chars[bit]);      
                bit = bs[i] & 0x0f;    
                sb.append(chars[bit]);    
                sb.append(' ');    
            }      
            return sb.toString().trim();      
        }       



}


  • 写回答

5条回答 默认 最新

  • 91program 博客专家认证 2015-01-19 06:24
    关注

    超过0x80就会乱码,会不会接收端字符编码的问题,或显示的问题。
    Sokcet 发送与接收与数据是否大于 0x80 没有关系。

    评论

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题