Android Socket服务器数据输入流无法再次显示传递数据



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

以下是客户端的一部分

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");
                }
            });
        }           
}};   

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

dataOutputStream.write(buf);

Thread.sleep(1000);

dataOutputStream.flush();

相关内容

  • 没有找到相关文章

最新更新