以你喜歡的方式(思惟導圖、OneNote或其餘)概括總結多網絡相關內容。javascript
爲了讓你的系統能夠被多個用戶經過網絡同時使用,須要爲你的系統增長網絡功能。java
驗證在登陸時讀者的信息是否正確,服務器正確時則將登陸成功的信息返回客戶端,不正確則返回false。
服務器端不斷監聽一個接口,客戶端採用多線程,在讀者登陸客戶端時利用流的方式和服務器端鏈接。
編程
讀者的帳戶信息。
二進制。
小程序
TCP
經常使用的類:Socket、ServerSocket、Thread、ObjectInputStream、InputStream
瀏覽器
public class SocketThread extends Thread { private Socket socket; private static AllReaders allReaders = new AllReaders(); public SocketThread(Socket socket) { this.socket = socket; } public void run() { try { InputStream inputStream = socket.getInputStream(); ObjectInputStream objectInputStream = new ObjectInputStream(inputStream); Reader reader = (Reader) objectInputStream.readObject(); OutputStream outputStream; PrintWriter printWriter; if(allReaders.isReader(reader.getId(), reader.getPassword()) == true) { System.out.println("已收到讀者(ID:"+reader.getId()+"),此客戶端IP爲:"+socket.getInetAddress().getHostAddress()); outputStream = socket.getOutputStream(); printWriter = new PrintWriter(outputStream);// 將輸出流包裝成打印流 printWriter.print("true"); printWriter.flush(); socket.shutdownOutput();// 關閉輸出流 } else { outputStream = socket.getOutputStream(); printWriter = new PrintWriter(outputStream); printWriter.print("false"); printWriter.flush(); socket.shutdownOutput(); } } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } }
周次 | 行數 | 新增行數 | 文件數 | 新增文件數 |
---|---|---|---|---|
1 | 91 | 91 | 5 | 5 |
2 | 504 | 413 | 18 | 13 |
3 | 1092 | 588 | 28 | 10 |
5 | 1158 | 129 | 34 | 6 |
6 | 1539 | 381 | 40 | 6 |
7 | 2023 | 484 | 49 | 9 |
8 | 2477 | 454 | 57 | 8 |
9 | 2709 | 232 | 63 | 6 |
10 | 3156 | 447 | 70 | 7 |
11 | 3531 | 375 | 79 | 9 |
12 | 4083 | 552 | 91 | 12 |
13 | 4850 | 106 | 15 | |
12 | 5700 | 850 | 118 | 12 |
須要將每週的代碼統計狀況融合到一張表中。服務器
ping www.baidu.com耗時較長,並且數據包有丟失;ping www.baidu.com耗時較短,並且數據包無丟失.這是由於前者在廣州,距離遠,由於數據落地傳輸,所以耗時長,然後者在廈門距離很近,因此耗時更短。
網絡
23
多線程
執行 telnet cec.jmu.edu.cn 80後看到黑屏,但有光標。並非cec.jmu.edu.cn的主頁內容
返回網頁的數據。
socket
聯網的程序:qq,Google瀏覽器,TeamViewer等。端口如上圖。qq佔用端口:5161五、51400。IP分佈在深圳等,協議是TCP。
tcp
ip、端口、域名、協議。利用域名解析出ip地址,利用ip地址找到主機,利用協議創建某種聯繫,經過端口肯定主機的某種服務。
顯示內容同樣,只不過一個是黑白一個是彩色的
要發送GET請求才能返回網頁內容,在本題中只有創建鏈接,沒有發送請求。
修改後代碼:
嘗試使用Client.java鏈接該TCP Server,使用該服務器向Client發送信息。(截圖關鍵代碼與運行結果)
參見2.1
建立兩個線程,一個用來接收消息,一個來接受消息。
public class SocketTest { public static void main(String[] args) throws UnknownHostException, IOException { Socket s = new Socket("127.0.0.1", 80); Runnable r1=new Output(s); Runnable r2=new Input(s); Thread t1=new Thread(r1); Thread t2=new Thread(r2); t1.start(); t2.start(); } } class Output implements Runnable{ private Socket out; public Output(Socket out){ this.out=out; } @Override public void run() { OutputStream os=null; Scanner sc=new Scanner(System.in); try{ os=out.getOutputStream(); PrintWriter pw=new PrintWriter(os,true); while(sc.hasNextLine()){ String str=sc.nextLine(); pw.println(str); } }catch(Exception e){ System.out.println(e); } } } class Input implements Runnable{ private Socket in; public Input(Socket in){ this.in=in; } @Override public void run() { InputStream is=null; try{ is=in.getInputStream(); Scanner sc=new Scanner(is); while(sc.hasNextLine()){ String str=sc.nextLine(); System.out.println(str); } }catch(Exception e){ System.out.println(e); } } }
4.1 改造3.1或3.2,將其改形成基於UDP的MenuServer。(區別題目3的TCP服務器的關鍵代碼,需截大圖、包含學號,不要截圖運行界面)。可使用網絡調試助手模擬UDP客戶端,將其設置爲UDP,要填本機IP與端口也要填遠程服務器的IP與端口。
4.2 對比相應的基於TCP的MenuServer,主要有何不一樣?爲了鏈接多個客戶端,必定要經過多線程技術嗎?若是不使用,怎麼區分不一樣的客戶端呢?
. 論述題:網絡程序與流
5.1 前面編寫的程序用到了大量的流的相關知識。簡述,編寫網絡程序時應當選擇什麼樣的流?Java網絡編程、流之間的關係。任選一場景描述,場景如:簡單的文字聊天、文件傳輸、應用層協議服務器,如QQ、聊天室、網絡遊戲。