服务器端:delphi使用Indy的TCPServer编写客 户 端:Android的Socket。——都是阻塞方式——目前碰到一个奇怪的问题,android向服务器发送数据,有时候是对的,但是大多数时候数据前面加了若干个"#FF",喵了个咪的,这些#FF那来的,实在纳闷!!!例如:发送数据“@AAA#”,服务器收到的却是“                @AAA#”,用16进制查看,前面空的字符全是#FF。下面归纳一下测试的现象:1. 模拟器测试没有这个问题,非常正常,真机测试就会出现(2台真机,一个2.3系统,一个4.0系统,都出现这个问题);2. 发送用“BufferedWriter”和“PrintWriter”都测试了,结果一样,无论哪个,发送的是String还是char[]都这样;3. 服务器端调试发现,前面的#FF的数量是变化的,第一次比较少,然后递增,到一定数量就会发送成功一次,然后又开始反复这种现象。泪奔啊~~~~~~求帮助!!!!!

解决方案 »

  1.   


    呃,补上代码:private Socket TCPSocket = null;
    private BufferedReader TCPIn = null;InetAddress ia = InetAddress.getByName(sHost);
    TCPSocket.connect(new InetSocketAddress(ia, iPort), 3000);
    TCPOut = new BufferedWriter(new OutputStreamWriter(TCPSocket.getOutputStream()));TCPOut.write("...");
    TCPOut.flush();
      

  2.   

    OutputStream  InputStream 应该没有这个问题吧!
    for Example:
    OutputStream os = conn.getOutputStream();
    os.write(..(byte数组)..);
    os.flush();
      

  3.   


    to(sada09):使用OutputStream发送byte[]还是这样,晕啊,难道是编码的问题,也不对啊,模拟器就是好的,奇怪了
      

  4.   

    通讯的过程导致数据变化的机率是非常低的,所以,建议你用Log输出检查发送前的数据,以及接收后的数据,以及你数据转换的方式。
      

  5.   

    to(AMinfo):安卓端使用Log抛出的即将write的数据正常,delphi端debug获得的数据就不正常了,将两 边的数据全部转成一种编码方式(UTF-8,GB2312等等),都测试过,现象一样。很多次不正常,正常一次,再次很多次不正常,正常一次这样反复客户端使用delphi写了一个测试程序,没有这样的问题。看来还是delphi的Indy和Android的socket之间通讯有猫腻,继续含泪探索中...
      

  6.   

    使用DataOutputStream,DataInputStream,读写字节流。------write-----
    DataOutputStream  mOutputStream = new DataOutputStream(mSocket.getOutputStream());
    String sendString = "test";
    byte[] sendArray = sendString.getBytes("UTF-8");
    mOutputStream.write(sendArray);
    mOutputStream.flush();-------read------
    byte[] buffer = new byte[n];
    DataInputStream in = new DataInputStream(mSocket.getInputStream());
    count = in.read(buffer)
      

  7.   

    抓一下包看看发出去的数据是否含FF之类的,抓包参考http://blog.csdn.net/ultrapro/article/details/7097305