Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android无法使用套接字读取和写入数据_Java_Android_Sockets - Fatal编程技术网

Java Android无法使用套接字读取和写入数据

Java Android无法使用套接字读取和写入数据,java,android,sockets,Java,Android,Sockets,我尝试在两个具有套接字的设备之间发送数据,其中一个将充当服务器套接字。我能够连接设备,但无法从inputstream读取数据。这是我的代码(服务器和客户端都相同) 用于写入数据的代码: button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { text = message

我尝试在两个具有套接字的设备之间发送数据,其中一个将充当服务器套接字。我能够连接设备,但无法从inputstream读取数据。这是我的代码(服务器和客户端都相同)

用于写入数据的代码:

 button.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {

                    text = message.getText().toString();                                               
                    out.println(text);
                   update(text);


             }
         });
从inputstream读取数据的代码:

 //Finding problems in this code! Not Recieving exceptions but not able to make toast too.
  try{
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        while (( clientMsg=in.readLine())!=null){


   update(clientMsg);

        }
        in.close();
        socket.close();
        update("Connection Closed");
    }catch (IOException e){
        update(e.toString());
    }
更新方法:

  public void update(final String msg){
    activity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
           Toast.makeText(activity,msg,Toast.LENGTH_LONG).show();
        }
    });

}
当设备在它的输出流中接收到一些数据时,我不想得到祝酒词。我能知道我的代码有什么问题吗

已编辑整个MessageReader类(用于从套接字读写数据)


你能把用来读取数据的全部代码都贴出来吗?特别是catch块之前的事情会很有帮助。问题在于您正在读取数据的部分。你只做过一次。如果流中没有数据,则不会打印。您应该使用一个在后台运行并始终在套接字上侦听的服务来完成此任务。因为有一条消息,这个服务应该告诉这个UI显示该消息。我正在使用while循环来读取该数据。它将一直读取到输入不为空。因此我认为这不是问题。如果您正在创建套接字,并且套接字上没有输入,它将永远不会进入while循环,请尝试使用Scanner或bufferedReader程序读取输入。他们会一直等到你输入一些东西。你可以发布用于读取数据的全部代码吗?特别是catch块之前的事情会很有帮助。问题在于您正在读取数据的部分。你只做过一次。如果流中没有数据,则不会打印。您应该使用一个在后台运行并始终在套接字上侦听的服务来完成此任务。因为有一条消息,这个服务应该告诉这个UI显示该消息。我正在使用while循环来读取该数据。它将一直读取到输入不为空。因此我认为这不是问题。如果您正在创建套接字,并且套接字上没有输入,它将永远不会进入while循环,请尝试使用Scanner或bufferedReader程序读取输入。他们会等你进去
 public class MessageReader extends Thread{
    private Socket socket;
    private View view;
    private Activity activity;
    EditText message;
    Button send;
    PrintWriter out = null;
    private TextView textView;
    private String text;
    public MessageReader(Socket client, View root){
        socket = client;;
     this.view = root;

         activity = (Activity)root.getContext();
    }


    @Override
    public void run() {

        try {
            out = new PrintWriter(socket.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
        String clientMsg;
update("Now in MessageReader");
          message = (EditText) view.findViewById(R.id.yourMessage);
             send = (Button) view.findViewById(R.id.send);
             textView = (TextView) view.findViewById(R.id.message);

             send.setOnClickListener(new View.OnClickListener() {
                 @Override
                 public void onClick(View v) {
                   update("about to send message");
                  text = message.getText().toString();



                         out.println(text);
                         update(text);


                 }
             });


        try{
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            update("waiting for a message");
            while (( clientMsg=in.readLine())!=null){
                update(clientMsg);
                updateUi(clientMsg);

            }
            in.close();
            socket.close();
            update("Connection Closed");
        }catch (IOException e){
            update(e.toString());
        }




    }

    public void update(final String msg){
        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
               Toast.makeText(activity,msg,Toast.LENGTH_LONG).show();
            }
        });

    }
    public void updateUi(final String message){

        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                textView.setText(message);
            }
        });
    }

}