android app之間使用socket做溝通

最近在製作一個兩個app之間能夠互相溝通並且傳遞一些指令的專案,這種專案適合用socket而不是URLconnection,原因如下。

A socket can implement almost a duplex kind of functionality, whereas a url connection can connect to a given URI and read its content.



經過一些研究之後了解到,要建立一個 Socket 連線,我們必須寫兩支程式,分別代表 Client 端以及 Server 端。在網路上搜尋到一個多人聊天室的範例程式,如下:

Server(Server可以在能夠執行java的環境下直接執行)

1
2


client(android studio)

1
2
3


這邊值得一提的是,開Socket Server的主機ip要如何獲得,port可以隨意指定,但是ip要如何獲得呢?這邊提供一個方式
1

new Thread(new Runnable() {
    @Override    public void run() {
        ChatServer server = new ChatServer();        
        server.setContext(MainActivity.this);        
        server.start();    
        }
    }).start();



搭配Server.java在MainAvticity加上上面這段,可以印出IP。順帶一提的是,使用Android Studio的模擬器的話,模擬器server的IP為10.0.2.15。兩台模擬器之間要互相連線的話可以參照其他網路上設定虛擬IP的方法。



在別得class創建一個新的activity
最後提一下小心得,Socket的應用於app的小心得,由於創建clinet thread的activity跟發送資料與收到資料時的activity通常不會一樣,我們必須要所有的activity收到資料都要能夠透過那個資料,做一些處理UI的事情,例如創建新的activity或是更改UI的值。要如何做到呢?必須要獲得thread中的變數。


我們可以在thread的類中使用static去宣告需要跨activity的變數來使用。以上。或許不好的方法,但解決了我現在的問題。








留言

這個網誌中的熱門文章

android service作法

html css & bootstrap心得