【问题标题】:Android Sockets - My code is working 2.3.6 but not in 4.xAndroid Sockets - 我的代码在 2.3.6 中工作,但在 4.x 中没有
【发布时间】:2012-10-29 13:58:48
【问题描述】:

我是 Android 和 Java 编程的新手,我被困住了。

我能够创建一个 TCP/IP 通信客户端(通过 LAN),它在基于 Windows 的 Web 服务器上发送文本消息。该代码在我目前在 2.3.6 上运行的三星 Galaxy S Advance 手机上运行良好。但是,在运行 Android 4.0 和 Android 4.1 的其他两台设备上尝试 apk 文件时,应用程序正在运行,但 PC 上没有收到任何消息(测试在同一网络上进行)。

我用来发送数据包的函数如下:

public void sednit(String IP,String MSG) {
try {
        // Socket  s = new Socket ("192.168.128.102",39999);
      Socket  s = new Socket (ipaddress,39999);
       //outgoing stream redirect to socket
       OutputStream  out = s.getOutputStream();
       PrintWriter  output = new PrintWriter (out);
       output.println(MSG);
       output.flush();
       BufferedReader  input = new BufferedReader (new InputStreamReader(s.getInputStream)));
       //read line(s)
       String  st = input.readLine();
       //Close connection
       s.close();
      } catch (Exception e) {
        // Toast.makeText(getApplicationContext(), e.toString(),Toast.LENGTH_LONG).show();
          Toast.makeText(getApplicationContext(), "Unable to communicate with player", Toast.LENGTH_LONG).show();
      }

我做错了什么?

Android 4 及更高版本是否有任何限制,或者我的清单文件搞砸了?

谢谢。

【问题讨论】:

  • 使用AsyncTask进行网络调用
  • 您可能会遇到 NetworkOnUIThread 异常。检查您的 logcat 以获取详细信息。解决方案 - 在单独的线程上移动网络操作

标签: android sockets tcp connection wifi


【解决方案1】:

您很可能会收到NetworkOnMainThread 异常。自 Android Honeycomb 以来,您需要在单独的线程中执行网络操作以提高 UI 响应能力。最简单的方法是使用AsyncTask 来管理您的网络操作(如果它很短),或者如果需要维护连接,则扩展java.io.Thread

【讨论】:

  • 不是“姜饼以来”,而是 Honeycomb 以来。这就是它在 2.3.6 下工作的原因。然而,无论 API 级别如何,在主线程上进行通信都是不可能的,或者是一个坏主意,而 AysncTask 是解决问题的好方法。
  • 糟糕,抱歉。没错,Gingerbread 是实施之前的最后一个,而不是之后的第一个。我将编辑我的答案。
【解决方案2】:

正如 Tomislav 在评论中所说,使用 Asynctask 进行网络通信。
另外catch (Exception e) { 是一个非常糟糕的主意.. 捕获您所指望的异常,以便其他人可能被抛出并且您可以看到它们。我们不知道当您执行此操作时您的程序出了什么问题...

所以请执行 e.printStackTrace();或删除 try/catch,以便我们获取您的 logcat 并为您提供帮助。

【讨论】:

    猜你喜欢
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 2016-02-26
    • 2015-11-06
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多