Android p2p區域網聊天軟體的實現

2021-06-20 02:26:03 字數 1743 閱讀 5259

最近做了個android 端的區域網聊天軟體。簡單說一下思路:

首先由於是區域網的p2p,所以沒有後台伺服器。但是傳檔案,發資訊用的是tcp,tcp前提是建立連線。我們都知道tcp建立連線時需要雙方的ip位址才可以建立連線。

所以剛開始比較比較重要的一步是獲取對方主機的ip位址,這裡用udp區域網廣播實現。

獲取到本機的ip位址之後,比如是192.168.23.10,那麼用於廣播的目的位址就是192.168.23.255。經測試 192.168.23.0(代表乙個網段)也是可以進行廣播的。

接下來只需要構造udp資料報傳送出去即可,核心**如下:

注:mymsg是乙個string型別的變數,及時你要傳送給對方的資訊,這裡不僅僅傳送ip,還傳送暱稱等資訊。

udp接收的核心**如下:

// 構造 datagrampacket,用來接收長度為 length 的資料報

datagrampacket packet = new datagrampacket(inbuf,

inbuf.length);

synchronized (socket) catch (exception e)

}string s = new string(packet.getdata(), "utf-8");

注:inbuf 是乙個自定義的緩衝區,這個緩衝區應該要比接受的資訊的容量大,我這裡用的是100個位元組的緩衝區。

還有要注意的一點,拿到對方ip後,按照常理應該傳送自己的ip給對方,這樣對方才能更新他的好友列表。所以我們需要判斷收到的udp廣播是否是自己發的,是否是重複           收到的等因素。若不判斷會造成雙方一致不停地對發的死迴圈。

拿到雙方的ip之後一切都好辦了。對於tcp的連線本省來說,有乙個服務端(serversocket)跟乙個客戶端(socket)。我這裡預設當主機要接收資訊的時候作為服務端,傳送的時候作為客戶端。

由上,當我們開啟應用的時候,應該開啟乙個tcp的服務端執行緒,用於不斷接收來自他人的資訊(文字,檔案。。)

核心**如下:

while (stopfalg)

}} catch (ioexception e)

}注:serversocket 的 accept方法是乙個阻塞方法,就是改方法有乙個內迴圈。如果該方法沒有返回乙個socket 的例項,那麼語句會一直停在這個方法。

由於主機可能同時和多個主機進行通訊,所以直接在迴圈中處理即受到的資訊不妥當。可以用乙個執行緒維持當前的連線(將例項化好的socket傳入即可)。

tcp傳送文字資訊核心**如下:

其中 serverip 是服務端的ip,即接收方的ip。當傳送方 執行socket = new socket(serverip, 3333);的同時,服務端serversocket 的accept 方法會跳出迴圈,返回乙個socket例項。

接收方接收文字資訊的核心**如下:

//建立伺服器輸入/輸出流

in = new datainputstream(clientsocket.getinputstream());

//讀入客戶端傳送過來的資訊

string message = in.readutf();

//synchronized (tcpserverthread.messages)

從serversocket返回的socket例項—clientsocket中取得輸入流,監聽輸入流進行判斷即可。

tcp傳送檔案的方法也跟文字資訊大同小異,不再贅述。

貼上源**:

技術因分享而強大!

區域網聊天專案 2018 07 28

伺服器能開啟的最多檔案描述符是有限的 1024 socket的連包問題。客戶端和伺服器端進行互動。傳送端的連包問題。json包,如果兩個json包連在一起,則解析的時候只能解析第乙個包,壓根就不知道第二個json包的存在。在每乙個json包裡加乙個size選項,邊界也要加上。滑動視窗協議 1bit滑...

區域網聊天軟體 鴨梨山大

對付壓力的區域網聊天軟體辦法,睡覺!對我來所蠻有效的方法,對付搞不定的事情,好好睡一覺,第二天滿狀態再去搞。至於那個問題,我想做的是什麼?起碼不想做重複枯燥無意義的因為體制導致的無法優化的重複性勞動 這基本就是我實習的狀態 評估以後,去掉了一半,然後,想做什麼?有活力,比較自由,可以通過自己 看到效...

Qt編寫的區域網聊天程式

這個程式足足用了乙個月的時間,也怪小生內功不強,但此番修煉著實受益良多。整體程式不建議大家觀摩,主要是太亂了。在這裡我會將其中的幾個重要部分剝離出來和大家分享。該程式介面靈感 於網路,小生不才,又加了一部分自己的愚見,還望源作者能夠原諒。此程式借鑑了江湖上的各位大俠的秘籍和高招,既然 於江湖,就回歸...