【问题标题】:Need to communicate with a TCP/IP locally hosted server in Java Android Studio需要与 Java Android Studio 中的 TCP/IP 本地托管服务器通信
【发布时间】:2017-01-30 09:46:15
【问题描述】:

我有以下情况。 我有一个在 8090 端口上运行的本地托管 TCP/IP 服务器 我需要能够从我的 android 应用程序向它发送命令。服务器应该接受该命令并返回一组我需要的信息。 我无权访问服务器或服务器日志。

我一直在尝试什么

简单的 Socket 连接,似乎连接得很好。但是,在使用 printWriter 并向服务器发送我的命令之后。 BufferedReader 卡在 reader.readLine() 或 .read() 上。我假设服务器没有响应我的命令,作者没有正确写入(我怎么知道?)或者这种方法不适合手头的情况。

一直在尝试使用 URL 和 HTTPURLConnection 对象,但我不确定自己是否正确。

我确实有可以发布的代码,但我认为它不相关。

你有什么建议?

请求的代码

                        Socket socket = new Socket("10.0.0.16", 8090);

                        //Send message to server
                        OutputStream os = socket.getOutputStream();
                        OutputStreamWriter osw = new OutputStreamWriter(os);
                        BufferedWriter bw = new BufferedWriter(osw);

                        String number = "message";

                        String sendMessage = number + "\n";
                        bw.write(sendMessage);
                        bw.flush();
                        System.out.println("Message sent to the server : "+sendMessage);
                        Thread.sleep(10000);
                        //Get the return message from the server
                        InputStream is = socket.getInputStream();
                        InputStreamReader isr = new InputStreamReader(is);
                        BufferedReader br = new BufferedReader(isr);
                        String message = br.readLine();
                        System.out.println("Message received from the server : " +message);

【问题讨论】:

  • 可以调试服务器吗?听起来解决方案可以通过查看服务器正在做什么/接收来找到。
  • 如果接收者试图读取一行,你应该确保发送者发送了一行或者在发送后关闭了套接字。然后一切顺利。那你在做什么呢?
  • have code that I can post however I don't think its relevant yet。当然它是相关的,因为您的代码还没有确定。
  • 好的,我会告诉你我得到了什么
  • to send it a command from my android application。您的 android 应用程序在哪里运行?

标签: java android sockets android-studio tcp-ip


【解决方案1】:

本地主机是指运行代码的设备,在本例中是模拟器。

如果要引用运行 Android 模拟器的计算机,请改用 IP 地址 10.0.2.2。您可以从here 阅读更多内容。

【讨论】:

  • 此答案中的信息与问题无关。我想知道谁赞成它。
  • 是的,它不是在模拟器上测试,而是在与托管服务器的 PC 位于同一网络上的 Android 设备上测试。
猜你喜欢
  • 2011-10-25
  • 2012-06-29
  • 1970-01-01
  • 2021-03-15
  • 2021-06-29
  • 2013-08-21
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
相关资源
最近更新 更多