INTERNET
权限,我将我的设备通过WiFi连接到与我的Mac OS X
框相同的网络上,并且我能够ping通我打开的端口。在最初的实验中,我让套接字处理程序在
UI Thread
而不是单独的线程上运行,它可以在已root的测试设备上工作。现在我把网络模块放在了单独的线程上,但我无法使ServerSocket.accept()
返回。它可以在Google的Android版本(vanilla)上工作,但不能在三星或索尼爱立信上工作。当我尝试进行telnet时,我的尝试会超时,而
logcat
不会打印任何异常或错误。这是我的代码的谷歌代码库链接: Google-code Repository 我正在单独的线程上运行
ServerSocket.accept()
,并在另一个线程上运行流处理器。对于我的设计意见(例如,我应该使用Handler
或AsyncTasks
),非常欢迎。目前,为了通过telnet接收到的消息展示Toast,我使用具有通过Context
获取的looper的Handler。当我在不工作的设备上通过adb shell运行
netstat -n
时,我得到以下内容:~$ 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
区别在于,在工作设备中,他们列出了一个带有我的端口开放状态LISTEN的IP。
更新:在我的android清单中设置了后,我尝试将端口号更改为689。它没有起作用;我得到了一个BindException,说我可能缺少INTERNET权限。所以,我将其改为1989,并回到一切正常,直到accept()。我认为这是因为我在非root手机上运行它,我无法访问1024及以下端口。
更新:我在我的Mac上运行了一个非常类似的程序,当我使用分配给我的IP地址从telnet连接到我的Mac时,它可以正常工作。当我试图从另一个Mac上进行telnet连接时,它并没有连接成功;连接会超时。但是在adhoc网络上它确实可以工作。我仍然需要尝试使用droid,但我会尽快更新。 更新: 我成功让这个应用在三台使用原生安卓系统的Droid上运行。它能在Nexus,Apanda A60(我的第一台设备,由于某些原因adb已经停止检测),以及一个自制的非品牌平板电脑上运行。尽管如此,因为我已经提供了相当大的悬赏,我打算将其进行到底。
正如之前所述,我的应用适用于原生安卓系统,但不适用于修改过的版本。未能运行该应用程序的三部手机都是中档型号;两部三星GT-i5503和一部索尼爱立信E16i。
accept()
周围的代码以及你所更改的内容,以便它停止工作? - CrackerJack9