Java網路程式設計 基於TCP協議的網路程式設計(三)

2021-07-24 14:07:34 字數 3061 閱讀 8181

增加聊天室功能:

1.可以看到是誰發的訊息。

2.實現私聊功能。

實現方法:

對於第乙個功能,可以使用map集合來儲存使用者資訊

第二個功能可以在客戶端傳送不同訊息時,對這些訊息進行處理,比如在訊息內容前後新增一些特殊字元,通過這些特殊字元來判斷。

**實現

特殊字元類:

public inte***ce chatroomprotocol
使用map儲存聊天室所有使用者名稱和對應輸出流之間的對映關係,map類:

public

class chatroommap}}

//獲取所有value組成的set集合

public synchronized setvalueset()

//根據value查詢key

public synchronized k getkeybyvalue(v val)

}return

null;

}//實現put()方法,該方法不允許value重複

public synchronized v put(k key, v value)

}return map.put(key, value);

}}

伺服器類:

public

class server

}//丟擲異常

catch(ioexception e)

}public

static

void

main(string args)

}

伺服器執行緒類:

public

class

serverthread

extends

thread

public

void

run()else

}//如果讀到的行以chatroomprotocol.private_round開始,並以其結束

//則可以確定是私聊資訊,私聊資訊只向特定的輸出流傳送

else

if(line.startswith(chatroomprotocol.private_round) &&

line.endswith(chatroomprotocol.private_round))

//公聊要向每個socket傳送

string msg = getrealmsg(line);

//遍歷clients中的每個輸出流

for(printstream clientps : server.clients.valueset())}}

//捕獲異常後,表明該socket對應的客戶端已經出現了問題

//所以程式將其對應的輸出流從map中刪除

catch(ioexception e)

if(ps != null)

if(socket != null)

}catch(ioexception ex)}}

//將讀到的內容去掉前後的協議字元,恢復成真實資料

private string getrealmsg(string line)

}

客戶端類:

public

class client

//如果伺服器端返回登陸成功,則結束迴圈

if(result.equals(chatroomprotocol.login_success))}}

//捕獲到異常,關閉網路資源,並退出該程式

catch (unknownhostexception ex)catch (ioexception ex)

//以該socket對應的輸入流啟動clientthread執行緒

new clientthread(brserver).start();

}//定義乙個讀取鍵盤輸出,並向網路傳送的方法

private

void

readandsend()else}}

//捕獲到異常,關閉網路資源,並退出該程式

catch (ioexception ex)

}//關閉socket、輸入流、輸出流的方法

private

void

closers()

if(brserver != null)

if(ps != null)

if(socket != null)

}catch (ioexception ex)

}public

static

void

main(string args)

}

客戶端執行緒類:

public

class

clientthread

extends

thread

public

void

run()

}catch (ioexception ex)

//使用finally塊來關閉該執行緒對應的輸入流

finally

}catch (ioexception ex)}}

}

本程式先啟動伺服器,然後啟動多個客戶端。每啟動乙個客戶端,需要填寫乙個使用者名稱,如果使用者名稱重複,便需要重新填寫,如果沒有重複,那麼伺服器便會給其他客戶端傳送新使用者上線。客戶端傳送訊息時,客戶端類會先判斷是公聊還是私聊,然後新增特殊字元,傳送給伺服器。然後伺服器解析資訊,判斷訊息型別,根據不同訊息選擇傳送方式。

在客戶端編寫訊息時,如果是私聊,然後處理訊息,在訊息內容中前後新增私聊的特殊字元。

例如:

傳送一條私聊,向aa傳送hello

//aa:hello

向這條資訊內容加入特殊字元

實際傳送的內容為:

★【aa※hello★【

公聊方式:

傳送公聊,傳送hello

hello

向這條資訊內容加入特殊字元

實際傳送的內容為:

§γhello§γ

QT基於tcp協議網路程式設計

基於qt網路程式設計 基於tcp協議 c s模式程式設計 所需要的類 qtcpserver qtcpsocket 利用qt基於tcp協議編寫c s模式程式 兩個類中的訊號 qtcpserver newconnection qtcpsocket readyread connected disconne...

基於TCP協議的網路程式設計 socket程式設計 1

1.1.網路位元組序 記憶體中的多位元組資料相對於記憶體位址有大端和小端之分,磁碟檔案中的多位元組資料相對於檔案中的偏移位址也有大端小端之分。網路資料流同樣有大端小端之分,那麼如何定義網路資料流的位址呢?傳送主機通常將傳送緩衝區中的資料按記憶體位址從低到高的順序發出,接收主機把從網路上接到的位元組依...

基於tcp的網路程式設計協議分析

在本地電腦的虛擬機器上搭建乙個tcp伺服器,如下 include include include include include include include include define buffer size 128 int main int argc,char ar if argc 3 if...