2

我正在尝试测试一个非常简单的 2 路 IM 应用程序。客户端在android上,服务器在我的PC(java)上。我已经在从 PC 到 PC 的 java 中测试了这个应用程序,它可以正常工作。

但是在我的 android 模拟器上,当我从我的 PC 向我的 android 模拟器发送一条消息时,只有当它从我的 PC 发送两次时,该消息才会显示在我的 android 上。从 PC 上单击一次发送按钮,没有任何显示,再次单击它,消息然后显示在 android 上。

我认为我的可运行方法有问题,但我不完全确定,希望有人能指出问题。提前致谢。

static Socket kkSocket = null;
static PrintWriter out = null;
static BufferedReader in = null;

static String msg;
TextView tv;
EditText et;

Handler mHandler = new Handler();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

tv = (TextView) findViewById(R.id.tv_message);
et = (EditText) findViewById(R.id.et_message);

Button btnSend = (Button) findViewById(R.id.btn_send);
btnSend .setOnClickListener(new View.OnClickListener() 
{
public void onClick(View v) {   

out.println(et.getText());

}
});     

Thread t = new Thread() {
    public void run() {
processThread();        
    }
};

t.start();

}

private void processThread() {

              try {
                    kkSocket = new Socket("xxx.xx.xx.xxx", 4444);
                } catch (UnknownHostException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    out = new PrintWriter(kkSocket.getOutputStream(), true);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }                   


                try {
                    in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));

                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


                try {
                    while (in.readLine() != null)
                    {
                        msg = in.readLine();
                        mHandler.post(mUpdateResults);                      
                    }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

}

Runnable mUpdateResults = new Runnable() {
 public void run() {
    tv.setText("Server: " + msg);
 }
};
4

1 回答 1

1

是否在每条消息后发送换行符?

缓冲的阅读器可能会阻塞等待换行符。

于 2011-07-17T09:28:00.643 回答