-2

我是 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 及更高版本是否有任何限制,或者我弄乱了我的清单文件?

谢谢你。

4

2 回答 2

1

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

于 2012-11-09T09:49:10.580 回答
0

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

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

于 2012-11-09T09:17:20.157 回答