Android Socket服务器dataInputstream无法再显示传递数据

时间:2015-03-06 09:38:34

标签: android sockets textview datainputstream

前几天曾被问过这个问题,但没有解决我的问题 所以我再次问我的问题。 在客户端部分,我认为应该没问题,因为使用串口检查是正常的

以下是客户

的一部分
try {
                byte[] buf ={(byte) 0x80,
                             (byte) 0x70,
                             (byte) 0x60,
                             (byte) 0x50,
                             (byte) 0x40,
                             (byte) 0x30
                        };                                                          
                dataOutputStream.write(buf); //writeBytes(String str)   
                dataOutputStream.flush();               
            }catch(Exception obj){

            }    

问题是SERVER, 我真的可以接收数据,但只显示第一组数据,没有办法显示第二组数据。

即使我发出第二组数据,仍然只显示第一组数据

以下是服务器的一部分(已修订!)

private Runnable socket_server = new Runnable(){
    public void run(){
        handler.post(new Runnable() {
            public void run() {
                test.setText("Listening...." + getMyIp());
            }
        });
        try{
            serverSocket = new ServerSocket(8888);
            Socket client = serverSocket.accept();

            handler.post(new Runnable() {
                public void run() {
                    test.setText("Connected.");
                }
            });
            try {
                DataInputStream in = new DataInputStream(client.getInputStream());                    
                    do{
                        byte[] re = new byte[6];
                        in.readFully(re);
                        short tmp[] = {(short) (0xff & re[0]),
                               (short) (0xff & re[1]),
                               (short) (0xff & re[2]),
                               (short) (0xff & re[3]),
                               (short) (0xff & re[4]),
                               (short) (0xff & re[5]),};
                        int ddata0,ddata1,ddata2,ddata3,ddata4,ddata5;                 
                         ddata0=tmp[0];
                         ddata1=tmp[1];
                         ddata2=tmp[2];
                         ddata3=tmp[3];
                         ddata4=tmp[4];
                         ddata5=tmp[5];                     
                         dd0=Integer.toHexString(ddata0);
                         dd1=Integer.toHexString(ddata1);
                         dd2=Integer.toHexString(ddata2);
                         dd3=Integer.toHexString(ddata3);
                         dd4=Integer.toHexString(ddata4);
                         dd5=Integer.toHexString(ddata5);
                         handler.post(new Runnable() {
                             public void run() {
                                test2.setText(dd0+dd1+dd2+dd3+dd4+dd5);
                             }
                         });
                    }while(in!=null);                    
            } catch (Exception e) {
                handler.post(new Runnable() {
                    public void run() {
                        test.setText("error");
                    }
                });
            }                   
        }catch(IOException e){
            handler.post(new Runnable() {
                public void run() {
                    test.setText("socket failed");
                }
            });
        }           
}};   

1 个答案:

答案 0 :(得分:-1)

我看到你使用了两次冲洗。在写字节之前和之后。您的操作是否有必要尝试让线程休眠一秒或2秒,以便您可以获得整个流。我怀疑字节过程比预期慢一点。

dataOutputStream.write(buf);

Thread.sleep(1000);

dataOutputStream.flush();