日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android socket 服务端,Android socket 服务端

發布時間:2023/12/4 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android socket 服务端,Android socket 服务端 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android socket 服務端

Android

想在Android 上跑一個 socket 服務端。把在java工程里運行起來的代碼直接放到android項目里來,開啟線程,創建ServerSocket對象,創建對象的時候報錯了。

W/System.err( 3998): java.net.SocketException: socket failed: EACCES (Permission denied)

W/System.err( 3998): at libcore.io.IoBridge.socket(IoBridge.java:583)

W/System.err( 3998): at java.net.PlainSocketImpl.create(PlainSocketImpl.java:201)

W/System.err( 3998): at java.net.PlainServerSocketImpl.create(PlainServerSocketImpl.java:38)

W/System.err( 3998): at java.net.ServerSocket.(ServerSocket.java:98)

W/System.err( 3998): at java.net.ServerSocket.(ServerSocket.java:69)

W/System.err( 3998): at com.binkery.http.server.HttpServer.run(HttpServer.java:34)

W/System.err( 3998): at java.lang.Thread.run(Thread.java:864)

W/System.err( 3998): Caused by: libcore.io.ErrnoException: socket failed: EACCES (Permission denied)

W/System.err( 3998): at libcore.io.Posix.socket(Native Method)

W/System.err( 3998): at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:181)

W/System.err( 3998): at libcore.io.IoBridge.socket(IoBridge.java:568)

W/System.err( 3998): ... 6 more

缺少權限的問題。

加上權限之后,一直出現這個問題,很郁悶。

W/System.err( 4232): java.net.BindException: bind failed: EACCES (Permission denied)

W/System.err( 4232): at libcore.io.IoBridge.bind(IoBridge.java:89)

W/System.err( 4232): at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:150)

W/System.err( 4232): at java.net.ServerSocket.(ServerSocket.java:100)

W/System.err( 4232): at java.net.ServerSocket.(ServerSocket.java:69)

W/System.err( 4232): at com.binkery.http.server.HttpServer.run(HttpServer.java:34)

W/System.err( 4232): at java.lang.Thread.run(Thread.java:864)

W/System.err( 4232): Caused by: libcore.io.ErrnoException: bind failed: EACCES (Permission denied)

W/System.err( 4232): at libcore.io.Posix.bind(Native Method)

W/System.err( 4232): at libcore.io.ForwardingOs.bind(ForwardingOs.java:39)

W/System.err( 4232): at libcore.io.IoBridge.bind(IoBridge.java:87)

W/System.err( 4232): ... 5 more

后來在stackoverflow.com 上找到了答案,百度不給力啊,關鍵時候還是google,google能search到這些答案,百度很無力啊。

這個是鏈接:

http://stackoverflow.com/questions/2694797/bindexception-with-internet-permission-requested

原因呢,是端口號不能低于1024,據說是Linux的問題。這個待考證吧。

Either root your phone, modify the firmware, or don't bind to ports lower than 1024. That's a Linux thing more than an Android thing.

我本來打算用80端口的,結果不能用。我用無參的構造器的時候,也沒有給我返回一個自動分配的端口。

我覺得這個問題還是有可能通過其他方式解決的。80端口除非被占用了,不然還是能有辦法搞到手的。現在只能老習慣,9527占用端口了。

mServer = new ServerSocket(9527);

有個地方搞錯了。剛才看了一眼API,無參的ServerSocket() 返回一個未綁定ServerSocket , 使用ServerSocket(0) 才是返回系統自動分配的端口。

不過還沒有找到關于1024的問題。

2016.12.13 更新

比較悲劇的是,多年以后 google 問題 google 到自己當年寫的破玩意~~

上面的問題都是比較初級的問題了,一個是沒有權限,一個是端口號的問題。端口號確實是不能少于 1024 的,1024 以下被定義為保留端口,所有一般不能使用。當然是一般不能使用了,說明還是有辦法的,這里就不討論了(主要我也不知道~~)。

最近我又再次碰見 socket failed: EACCES (Permission denied) 的問題,但這次可以肯定的是 application 的權限是有的,而且是正確的,因為我這是在一個正在運行的線上的商業項目中的,這種低級的問題是不能的。但是在錯誤日志的收集中還是看見了若干這樣的報錯,感覺有些困惑。

鑒于只是少量用戶碰見這樣的問題,大概的推測為兼容性問題,一直以來,Android 的網絡權限都是安裝時授權的,不管是6.0之前還是 6.0 之后,所以當運行的時候碰見因為網絡權限拒絕的問題,大概可以確定是部分機型的兼容性問題。

部分機型,特別是國內機型,在設置里會有針對每個應用單獨的網絡權限控制,在國內目前高昂的流量資費的大背景下,很多機型都提供給用戶可以為每個應用設置網絡權限的方式,還有可以分別設置 wlan 或者數據。

相關文章

- EOF -

本站文章除注明轉載外,均為本站原創或編譯。歡迎任何形式的轉載,但請務必注明出處,尊重他人勞動。

轉載請注明:文章轉載自 Binkery 技術博客 [https://binkery.com]

本文標題: Android socket 服務端

本文地址:https://binkery.com/archives/266.html

總結

以上是生活随笔為你收集整理的android socket 服务端,Android socket 服务端的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。