从Android客户端向Java服务器发送消息

时间:2016-12-18 15:00:11

标签: android sockets server client

我正在开发一个Android应用程序,我需要从应用程序向Java服务器发送消息。

Java Server的工作原理如下:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    for sub1 in self.view.subviews {
        for sub2 in sub1.subviews {
            for sub3 in sub2.subviews {
                if let textView = sub3 as? UITextView {
                    textView.text = "test"
                }
            }
        }
    }
}

在我的应用程序中,我以这种方式发送消息:

thread = new Thread(){
            public void run(){

                System.out.println("Server is running...");

                try {
                    ServerSocket socket = new ServerSocket(7000);
                    while(true){
                        Socket s = socket.accept();
                        DataInputStream dis = new DataInputStream(s.getInputStream());
                        System.out.println("Received from client: " + dis.readUTF());
                        dis.close();
                        s.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        };
        thread.start();

我可以通过模拟器和手机成功发送消息,因为它们连接到同一个wifi连接,但如果设备未连接到同一网络,则不会将消息发送到服务器。我希望每个人都能够将消息发送到我的计算机服务器,无论他们的互联网连接如何。

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

一般情况下,您需要使用类似Web Sockets的内容来实现您尝试做的事情,通常情况下,客户端/服务器位于不同的网络上。有一些不同的Web Socket实现,例如https://medium.com/square-corner-blog/web-sockets-now-shipping-in-okhttp-3-5-463a9eec82d1#.w9hrc1icw

修改 我最初误读了问题,并认为你试图异步地从服务器向客户端发送消息(这需要像Web套接字一样)。如果您只是从客户端向服务器发出请求,那么典型的解决方案是从您的服务器公开REST API(并使用类似Retrofit的内容来向客户端发出请求)。