UDP編寫的聊天室

2021-10-06 01:39:09 字數 2148 閱讀 9098

一、要求:實現,學生,老師相互聊天【雙方都可以一邊接收一邊傳送】

二、分析

假設老師,學生各有乙個傳送端,接收端

則老師需待學生傳送完後,才能傳送,學生也是如此

故需要使用多執行緒,實現相互聊天

三、示意圖如下

1)傳送端

/*

*互聊測試手動輸入,螢幕輸出 ;從system.in讀取,將位元組陣列傳送;

方法一:bufferedinputstream is=new bufferedinputstream(system.in);

缺點,is.read(buf),buf的大小不好確定

方法二:bufferedreader is=new bufferedreader(new inputstreamreader(system.in));

缺點,第一次將位元組流轉成字元流,第二次將字串轉成位元組傳送

傳送端:先讀取【用bufferedinputstream(system.in)讀取,每回讀取多大?,或者說,用bufferedreader,每回讀取一行,但需要轉換流將位元組流system.in轉成字元流】,再寫入到位元組陣列中【用bytearrayoutputstream,直接寫入到位元組陣列,方便,快捷】

原因,因為本來就用轉換成位元組陣列,故用位元組流,加上緩衝後更快,故bufferedinputstream

可以用bufferedoutputstream包裝乙個fileoutputstream,不過while迴圈,反覆讀取,陣列大小,也不好定

*//**

* 1.使用datagramsocket

* 2.準備資料

* 3.封裝成datagrampacket包裹,需指定目的地

* 4.釋放資源 若是多執行緒,則最後釋放資源

* @author dell

* */

public

class

testudpclientsystemin06

extends

thread

public

void

run(

)釋放system.out.

println

("傳送成功");

//* 4.釋放資源 若是多執行緒,則最後釋放資源

ds.close()

;}catch

(exception e)

}public

static

void

main

(string[

] args)

throws exception

}

2)接收端

/**

* 互聊

* 測試手動輸入,螢幕輸出

*//**

* 1.使用datagramsocket

* 2.準備容器 封裝成datagrampacket包裹

* 3.阻塞式接收包裹

* 4.分析資料

* 5.釋放資源 若是多執行緒,則最後釋放資源

* @author dell

* */

public

class

testudpserversystemin06

extends

thread

public

void

run(

)//4.分析資料

system.out.

println

("接收完畢");

//5.釋放資源 若是多執行緒,則最後釋放資源

ds.close()

;}catch

(exception e)

}public

static

void

main

(string[

] args)

throws exception

}

3)學生介面

public

class

testudpstudent

}

4)老師介面

public

class

testudpteacher

}

UDP多人聊天室

多人聊天室 chat room 客戶端功能 傳送請求,獲取結果 from socket import from multiprocessing import process import sys 伺服器位址 addr 127.0.0.1 8888 接收訊息 def recv msg s while ...

基於UDP聊天室程式

基於udp聊天室程式使用socket程式設計實現。windows套接字在兩種模式下執行i o操作,阻塞和非阻塞。在阻塞模式下,在i o操作完成前,執行操作的winsock函式會一直等待下去 如recvfrom,wsarecvfrom函式 不會立即返回程式 將控制權交還給程式 而在非阻塞模式下,win...

案例 udp聊天室(四)

報一下環境 win10 pycharm python3.7 mnetassist import socket def send msg udp socket udp sockrt 形參 傳送訊息 dest ip input 請輸入對方的ip dest port int input 請輸入對方的por...