Android套接字客户端无法从java服务器接收

时间:2016-02-29 08:14:56

标签: android sockets

我的应用程序正在向java套接字服务器发送数据,但它只显示从服务器接收的第一条消息而不是其他消息。

  1. 服务器是多线程的。
  2. 我在java中创建了两个客户端,它们都是通过服务器发送和接收消息,但是在Android应用程序中我遇到了接收数据的问题。
  3. 这是Android客户端的完整代码。

    公共类MainActivity扩展了AppCompatActivity {

    Socket client;
    EditText writeMsg;
    TextView displayMsg;
    String userInput;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
    
        writeMsg = (EditText) findViewById(R.id.editText1);
        displayMsg = (TextView) findViewById(R.id.textView);
    
    
        ReceiveMsg obj = new ReceiveMsg();
        Thread tr = new Thread(obj);
        tr.start();
    }
    
    
    // A button to send msg to server when clicked
    
    public void sendBtn(View view){
    
        userInput = writeMsg.getText().toString();
        SendMessage object = new SendMessage();
        object.execute();
    

    }

    private class SendMessage extends AsyncTask<Void, Void, Void> {
    
        @Override
        protected Void doInBackground(Void... params) {
            try {
    
                client = new Socket("10.0.2.2", 4444);
                PrintWriter output = new PrintWriter(client.getOutputStream(), true);
                output.print(userInput);
                output.flush();
                output.close();
                client.close();
    
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
    
        }
    }
    
    class ReceiveMsg implements Runnable {
        public void run() {
    
    
                try {
                   client = new Socket("10.0.2.2", 4444);
    
                      BufferedReader in =
                            new BufferedReader(
                                    new InputStreamReader(client.getInputStream()));
                    int i = 0;
    
                    while (i == 0) {
    
                       displayMsg.setText(in.readLine());
                    }
    
                } catch (Exception e) {
    
                }
    
            }
    
        }
    

    }

    我希望应用在文本视图中显示新收到的消息并覆盖现有消息。

2 个答案:

答案 0 :(得分:0)

您创建了两个客户端套接字。一个用于发送,一个用于接收。

正常只有一个客户端套接字发送命令然后接收服务器的回复。

答案 1 :(得分:0)

像往常一样,你正在读行,但你不是在发送行。

使用println(),而不是print()

当您获得IOExceptionreadLine()返回null时,您还需要停止阅读。

为什么有两个客户端套接字是另一个谜。