java-Android系统socket通信字节乱码。

问题描述

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  ={0xF10x030x100x000x000x080x540x3C};       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();              }       }

解决方案

byte[] bs = str.getBytes();这句加上编码UTF-8呢byte[] bs = str.getBytes(""UTF-8"");

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

解决方案三:
你在双方都添加编码进去呢。

解决方案四:
字符编码查过ASCII码了,所以解码失败

解决方案五:
编码要统一,所有的乱码都是编码不统一造成的。

时间: 2024-09-08 21:19:27

java-Android系统socket通信字节乱码。的相关文章

android通过socket通信实现客户端读取服务端的二进制数据,并展示在textview控件上

问题描述 android通过socket通信实现客户端读取服务端的二进制数据,并展示在textview控件上 客户端通过socket通信,完成读取服务端的二进制数据读取,并将数据显示在textview控件上,数据全为整型 解决方案 之前接触一些,但不是我我写的.JNI中C读取,生成Native方法.上层调用 解决方案二: 底层c来封装so文件调用socket API.上面Java调用so 解决方案三: ....java自己有socket啊,ls各位回答的什么意思.... 简单的socket网上教

python服务器与android客户端socket通信实例_python

本文实例讲述了python服务器与android客户端socket通信的方法.分享给大家供大家参考.具体实现方法如下: 首先,服务器端使用python完成,下面为python代码: 复制代码 代码如下: #server.py  import socket  def getipaddrs(hostname):#只是为了显示IP,仅仅测试一下      result = socket.getaddrinfo(hostname, None, 0, socket.SOCK_STREAM)      re

Android中Socket通信的实现方法概述_java

本文实例简述了Android中Socket通信的实现方法,具体内容如下: 一.socket通信概述 通俗的来说套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元.它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口. 应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进程可能需要通过同一个TCP

android 中socket通信

问题描述 android 中socket通信 private Button send; private TextView rec; private static Socket client; private boolean result=false; private int a=0; private PrintWriter write; private static BufferedReader read; public static int ac=0; private InputStream

详解Android的Socket通信、List加载更多、Spinner下拉列表_Android

Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据.而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求. 那么,什么是socket?Socket又称套接字,在程序内部提供了与外界通信的端口,即端口通信.通过建立socket连接,可为通

详解Android的Socket通信、List加载更多、Spinner下拉列表

Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据.而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求. 那么,什么是socket?Socket又称套接字,在程序内部提供了与外界通信的端口,即端口通信.通过建立socket连接,可为通

Android的Socket通信编程实现程序

java在socket通信方面上已经有了很好的范例,我只是抛砖引玉,将其引入到android之中,疏漏之处在所难免,很多地方也值得深思与考量,高手不必拍砖,可跳过此文.下面,用敲门的方式演示Android如何实现套接字的通信. 服务器程序 服务器程序需要在PC上运行,该程序比较的简单,因此不需要建立Android项目,直接定义一个JAVA类,并且运行该类即可.它仅仅建立ServerSocket监听,并使用Socket获取输入输出流  代码如下 复制代码 import java.io.IOExce

浅析Android系统中HTTPS通信的实现_java

前言最近有一个跟HTTPS相关的问题需要解决,因此花时间学习了一下Android平台HTTPS的使用,同时也看了一些HTTPS的原理,这里分享一下学习心得. HTTPS原理HTTPS(Hyper Text Transfer Protocol Secure),是一种基于SSL/TLS的HTTP,所有的HTTP数据都是在SSL/TLS协议封装之上进行传输的.HTTPS协议是在HTTP协议的基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层协议.所以,研究HTTPS协议原理,最终就是研究S

Android Socket通信详解_Android

一.Socket通信简介  Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据.而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求. 那么,什么是socket?Socket又称套接字,在程序内部提供了与外界通信的端口,即端口通信.通过