Android利用socket通訊

2021-07-15 04:19:01 字數 1873 閱讀 2865

一台pc和兩部手機,手機作為客戶端和伺服器之間以socket方式通訊,pc作為伺服器在客戶端之間**訊息,實現兩個客戶端之間的通訊。

(一)客戶端實現:

指定ip和埠,新建socket物件。這個ip和埠都要和伺服器那邊的socket一樣。

socket msocket = new socket(ip, port);
然後通過客戶端socket物件獲取writer和reader:

mreader = new bufferedreader(new inputstreamreader(msocket.getinputstream(), "utf-8"));

mwriter = new bufferedwriter(new outputstreamwriter(msocket.getoutputstream(), "utf-8"));

mreader.readline()方法是阻塞式的,就是說有訊息傳來才會進入下一步。

規定以json物件來傳輸訊息,於是根據mreader.readline()讀出的string構建json:

jsonobject json = new jsonobject((string)mreader.readline());
最後將json中的資料讀出來即可。

構建乙個json物件,將資料放入其中,然後使用下面語句傳送:

mwriter.write(json.tostring()+"\n");

mwriter.flush();

(二)伺服器端實現:

伺服器端有兩個功能,監控客戶端和伺服器之間的連線,並維護乙個訊息佇列。

writer.write(json.tostring()+"\n");

writer.flush();

語句傳送訊息,其中writer是根據socket獲取的bufferwriter:

bufferedwriter writer = new bufferedwriter(new outputstreamwriter(socket.getoutputstream(), "utf-8"));
serversocket mserver = new serversocket(port);
並通過呼叫阻塞方法

socket socket = mserver.accept();
獲得乙個socket物件,這行**只會在有客戶端連上伺服器後才執行,於是我們可以得知,新增了新的客戶端。

之後的流程與客戶端一樣,通過reader讀取客戶端的資料,並新增到訊息佇列;處理訊息佇列執行緒發現有新訊息送來,於是將該訊息傳送出去:

bufferedreader reader =

new bufferedreader(new inputstreamreader(socket.getinputstream(), "utf-8"));

string

data

= reader.readline();//阻塞語句,有資料送到伺服器才會往下執行

jsonobject json =

new jsonobject(data);

從json中讀出資料,再重新打包成自定義的訊息類,最後新增到訊息佇列中去。

利用socket傳檔案

1 顯示檔案進度 2 可以隨時終止傳輸過程 傳送資料執行緒 uint senddatathread lpvoid lpparam 接收資料執行緒 uint receivedatathread lpvoid lpparam 傳送資料按鈕訊息響應函式 void ctzg004dlg onbuttonse...

利用socket實現通訊

利用套接字 socket 實現通訊,client傳送兩個數,server接收並返回這兩個數的和 server.c include include include include include includeint main client.c include include include 包含套接...

Android 網路程式設計 Socket

socket是對tcp ip協議的封裝,socket本身並不是協議,而是乙個針對tcp和udp程式設計的介面 api 通過socket,我們才能使用tcp ip協議。socket的出現只是使得程式設計師更方便地使用tcp ip協議棧而已,是對tcp ip協議的抽象,從而形成了我們知道的一些最基本的函...