Android 简单 2 路 IM 问题(可运行)

标签 android networking runnable

我正在尝试测试一个非常简单的双向 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);
 }
};

最佳答案

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

缓冲的读取器可能正在阻塞等待换行符。

关于Android 简单 2 路 IM 问题(可运行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6722645/

相关文章:

android - 以编程方式检测调试 keystore 或发布 keystore

performance - 当您想发送匿名函数时,执行 (Runnable & Serialized) 是否太昂贵?

java - 如何从另一个 Runnable 类更新 java GUI? java

iphone - 使用 NSInputStream/NSOutputStream 通过 TCP 进行通信(iPhone)

ios - 可达性不起作用

java - 在线程池中重用 Runnable 有意义吗?

android - 针对多种文件格式文件(in.pdf、doc、ppt)

java - 如何从android中的ActivityThread读取/写入文件?

android - 如何在另一个 Activity 发送的 Activity 中获取并显示 EXTRA_TEXT?

networking - 尝试连接到自身时,带有 Docker 的 Centos VM 无法访问主机