服务器客户端在android中双向通信

时间:2011-09-10 19:25:05

标签: android client two-way

我正在实施这个例子

http://thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/

显示如何在两个Android手机之间进行服务器客户端通信。我已经开始工作,但我想尝试修改一下。目前,程序的设置方式是,客户端仅向服务器发送消息。我试图修改它,以便服务器也可以发送到客户端,客户端也可以监听。我在两部手机中都有一个定时器,它会增加一个计数器,我只是希望它们来回分享它们的计数器值。虽然这样做有困难。

在服务器端,在收到客户端的消息后,我决定添加一个printwriter     out = new PrintWriter(client.getOutputStream(),true);

然后在while循环中,我们从客户端读取输入,在我刚刚添加的可运行代码中     out.println(“你好客户”);

代码似乎没有崩溃,所以我猜这很好。那么现在我正在看客户端。 我意识到在单独的线程上运行套接字代码很重要,因为它是“阻塞”的。但是,该示例中的客户端代码似乎并没有使用处理程序,我想知道为什么。我尝试在客户端代码中放置一个bufferedreader,然后发布一个新的runnable,就像服务器代码一样。我将它放在与客户端具有printwriter

相同的try catch块中
 in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                     n=in.readLine();


                    if(n!=null)
                    {
                        handler.post(new Runnable() {
                            @Override
                            public void run() {

                                fromserver.setText(n);
                            }
                        });
                        //

                    }

我感到有趣的是,当发生这种情况时,我的服务器代码通常会更新它收到的客户端计数器值以及它自己的计数器值不再更新。它确实说它是连接的。我编程了它,除非它收到来自客户的消息,否则它不会设置其textlabel;这必须意味着客户端不再发送消息。我想知道我在客户端做错了什么。

重申一下,我要做的是让服务器和客户端来回发送信息。而且我认为我必须阻止一个线程。我不确定。有人能告诉我如何正确地做这种来回沟通吗?根据彼得的声明,我很好,只能在本地网络上工作。我有两部手机通过无线路由器连接。

谢谢

1 个答案:

答案 0 :(得分:0)

附注:移动网络使用NAT。 NAT阻止启动入站(Internet到设备)连接。这有效地阻止了移动设备托管服务器。

您的方法只适用于本地网络。