我正在尝试找到一种方法来远程登录到未root的机器人。我有INTERNET
权限处于活动状态,我的设备与我的设备连接在同一网络上Mac OS X
通过 WiFi,我可以 ping 通我打开的端口。
在最初的实验中,我让它在有根测试设备上工作,但我让套接字处理程序在UI Thread
而不是一个单独的线程。现在我将网络模块放在一个单独的线程上,我无法得到ServerSocket.accept ()
回来。它适用于 Google 版本的 android(vanilla),但不适用于三星或索尼爱立信的版本。
当我远程登录到它时,我的尝试会超时,并且logcat
不会打印出任何异常或错误。
这是我的代码的 google-code 存储库的链接:Google 代码存储库 https://code.google.com/p/android-socket-experiment/
我在跑步ServerScoket.accept ()
在一个单独的线程上,并在另一个线程上运行流处理器。对我的设计的评论(即我应该使用Handler
s or AsyncTasks
)非常受欢迎。现在,为了 Toast 通过 telnet 接收到的消息,我使用了一个处理程序,其中的循环程序通过Context
.
以下是我运行时得到的结果netstat -n
在非工作设备上的 adb shell 上:
~$ adb shell netstat -n
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:7777 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:7203 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:47609 127.0.0.1:7777 ESTABLISHED
tcp 0 0 127.0.0.1:7777 127.0.0.1:47609 ESTABLISHED
tcp 0 0 127.0.0.1:47610 127.0.0.1:7777 ESTABLISHED
tcp 0 0 127.0.0.1:7777 127.0.0.1:47610 ESTABLISHED
不同之处在于,在工作设备中,它们列出了一个 IP,其中我的端口处于“监听”状态。
UPDATE: 拥有<uses-permission android:name="INTERNET"/>
设置在我的android_manifest
,我尝试将端口号更改为689
。没用;我有一个BindException
,说我可能缺少 INTERNET 权限。所以,我把它改成了1989
,然后我又回到一切工作中,直到accept ()
。我认为这是因为我在非 root 手机上运行它,并且我无权访问端口1024
及以下。
UPDATE:我在 Mac 上运行了一个非常相似的程序,当我尝试使用分配给我的 IP 地址远程登录到我的 Mac 时,它运行得很好。当我尝试从另一台 Mac 进行远程登录时,它不起作用,但似乎无法连接;连接会超时。不过,它确实可以在临时网络上运行。我还没有使用 droid 进行尝试,但我会尽快更新。
UPDATE:我设法让该应用程序在 3 个运行 Vanilla(由 google 发布的 Android)的独立机器人上运行。它可以在 Nexus、Apanda A60(我的第一台设备;由于某种原因 adb 已停止检测到它。)以及定制的无品牌平板电脑上运行。不过,因为我已经提供了相当大的赏金,所以我打算坚持到底。
如前所述,我的应用程序适用于 Android 的 Vanilla 版本,但不适用于修改版本。无法运行该功能的三款手机均为中端机型; 2Samsung GT-i5503
s 和一个Sony-Ericcson E16i
.