思惟導圖:
html
ping www.baidu.com
與ping cec.jmu.edu.cn
,分析返回結果有何不一樣?爲何會有這樣的不一樣?
cec.jmu.edu.cn的訪問速度更快一些,由於它的IP地址在廈門市,而本機的IP地址也在廈門市。java
telnet bbs.newsmth.net
,上面這條命令鏈接的是遠程主機的什麼端口號?telnet的默認端口號爲23.
telnet cec.jmu.edu.cn 80
,嘗試回答:你從屏幕看到一些什麼內容?返回的內容是否是cec.jmu.edu.cn的主頁內容?嘗試使用GET /index HTTP/1.0命令,會返回什麼?詳見實驗任務書題目1。沒有內容。嘗試使用GET /index HTTP/1.0命令會返回主頁的源碼。
ConnectionWatcher
, 而後啓動若干個能夠聯網的程序(如QQ, telnet,瀏覽器等),查看本機上有什麼程序聯網,使用了什麼端口?QQ佔用了什麼端口和那些遠程IP進行交互,這些IP分佈地在那裏?使用了什麼協議進行通訊?網易雲音樂,360瀏覽器,QQ 443,80http端口。使用TCP協議.如119.145.235.91在廣東省深圳市 電信。編程
IP,端口,協議,輸入輸出流。
結果大體相同,就是控制檯不能解析顏色畫面。小程序
界面沒有東西。由於沒有發送get請求獲取html文檔,要GET/HTTP/1.0.瀏覽器
嘗試使用Client.java鏈接該TCP Server,使用該服務器向Client發送信息。(截圖)
緩存
服務器能夠發送信息給Client,Client也可發送信息給服務器,主要是獲得Socket對象的輸出流getOutputStream(),才能從控制檯輸出信息到服務器,控制檯的輸入Scanner(System.in)實現,PrintWriter從控制檯輸出信息,最主要的是在輸出後,調用flush()方法起到緩存做用,避免數據丟失。
//201521123014 try { InetAddress address = InetAddress.getLocalHost(); int port = 8190; DatagramSocket socket = new DatagramSocket(port, address); byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive(packet); String getMsg = new String(buf, 0, packet.getLength()); System.out.println("客戶端發送的數據爲:" + getMsg); Menu(); BufferedReader in=new BufferedReader(new InputStreamReader((socket).getInputStream())); String line=null; while(!(line=in.readLine()).equals("quit")) { if(line.equals("1")) { Date date=new Date(); DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time=format.format(date); writer.println(time); } else if(line.equals("2")) { String ip = InetAddress.getLocalHost().getHostAddress(); writer.println(ip); } else if(line.equals("4")) { return; } InetAddress clientAddress = packet.getAddress(); int clientPort = packet.getPort(); SocketAddress sendAddress = packet.getSocketAddress(); String feedback = "Received"; byte[] backbuf = feedback.getBytes(); DatagramPacket sendPacket = new DatagramPacket(backbuf, backbuf.length, sendAddress); socket.send(sendPacket); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } }
InputStream和OutputStream,用於服務器(客戶端)信息的寫入和讀取,達到通訊的效果。
socket的輸入輸出流是字節流,而後用字符流來包裝。
服務器從客戶端得到輸入流或輸出流而後向用戶讀取或者輸出。服務器
閱讀ServerAndThread目錄中的源代碼網絡
主要功能:客戶端和服務端實現信息的傳遞,通訊做用多線程
客戶端
socket
服務端
三個客戶端共享所有的信息,殊不知道誰發了這些信息,只有從服務端才能夠,能夠在程序中加入客戶端的名稱。
Networking Basics:
在網上運行的電腦都是用TCP和UDP來進行互相通訊的。當咱們寫網絡程序的時候,都是在應用層上操做。通常來講,咱們都不用關心TCP和UDP層。可使用java.net包。這些類提供獨立於系統地網絡通訊。
URL統一資源定位符是對能夠從互聯網上獲得的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。互聯網上的每一個文件都有一個惟一的URL,它包含的信息指出文件的位置以及瀏覽器應該怎麼處理它。
在Web應用中,服務器把網頁傳給瀏覽器,實際上就是把網頁的HTML代碼發送給瀏覽器,讓瀏覽器顯示出來。而瀏覽器和服務器之間的傳輸協議是HTTP,因此: