1、網絡的大致結構
2、網絡編程
通過直接或間接地使用網絡通訊的協議實現計算機與計算機之間的通訊。在TCP/IP協議層主要麥網絡主機的定位,數據傳輸的路由,由IP地址可以唯一地確定Internet上的一台機。
3、通過TCP/IP制作的網絡應用軟件的結構
(1)CS結構(Client---Service)
Client客戶端------(TCP/IP協議)-------Service服務器端
eg:QQ 王者榮耀游戲軟件客戶端
優點:無需記網址
缺點:需要安裝客戶端,占內存,安裝過程繁瑣,需要手動更新
(2)BS結構(Browser------Service)
Browser瀏覽器-------(http協議(TCP/IP協議的升級))-----Service服務器(web服務器)
eg:百度
優點:無需安裝客戶端,無需更新,直接從官網J進入
缺點:要記網址
4、TCP和UDP的區別
TCP:可靠的傳輸協議,點對點的傳輸,類似於視頻聊天,微信點對點的聊天。TCP傳輸的時候沒有大小的限制。
UDP:不可靠的網絡傳輸協議,類似於廣播。使用UDP傳輸數據時有大小的限制,每個被傳輸 的數據必須限定在64kb之內。
5、基於URL的編程
URL(Uniform Resource Locator)---一一致資源定位器
表示Internet上某一資源的地址,通過URL可以訪問Internet上的各種網絡資源。
URL的寫法:
協議的名稱://資源的地址
http:不安全,無加密
https:安全,加密,涉及到支付功能都會用https
基於URL的java的網絡編程:
java程序----(通過URL)------獲取資源
java中對於網絡編程的包在java.net中
分析:
資源----------------(讀取到)----------內存中
package URL; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; public class URLTest { public static void main(String[] args) { //第一步,創建URL對象 try { URL url=new URL("http://www.baidu.com/"); //把url指向的文件或數據轉換成內存中的流 try { InputStream inputStream=url.openStream(); //法1、用字節讀取 /*byte[] bytes=new byte[inputStream.available()]; inputStream.read(bytes); String str=new String(bytes); System.out.println("讀取的數據:"+str); inputStream.close();*/ //法2、如果用BufferedReader讀取 BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream)); String content; while((content=reader.readLine())!=null){ System.out.println(content); } reader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
6、Socket的網絡編程
(1)本質:基於TCP/IP協議的模型,實現的是網絡的通訊
(2)服務器端的Socket---- ServerSocket
客戶端的Socket------Socket
大致的實現步驟:
(a)創建Socket
(b)打開連接到Socket的輸入/輸出流
(c)按照一定的協議對Socket進行讀/寫的操作
(d)關閉Socket
package Socket; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.DataInputStream; import java.io.DataOutput; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class MyChatServer { public static final String ADDRESS="127.0.0.1"; public static final int PORT=20019; public static void main(String[] args) { //第一步:構建Socket對象 try { //監聽的是本機上的端口號 ServerSocket serverSocket=new ServerSocket(PORT); System.out.println("開始監聽服務器發來的請求"); //表示監聽的對象 Socket socket=serverSocket.accept();//線程阻塞的方法 //獲取socket傳過來的數據流 InputStream inputStream=socket.getInputStream(); //把數據打印出來 DataInputStream dataInput=new DataInputStream(inputStream) ; String str; System.out.println("從客戶端傳過來的數據"); while((str=dataInput.readUTF())!=null){ System.out.println(str); } System.out.println("從客戶端傳來的數據完畢"); OutputStream outStream=socket.getOutputStream(); DataOutputStream dataout=new DataOutputStream(outStream); //給客戶端發送的數據 System.out.println("寫給客戶端的話"); Scanner sc=new Scanner(System.in); String strcontent=sc.next(); dataout.writeUTF(strcontent); System.out.println("通訊完畢"); socket.shutdownInput();//關流 socket.shutdownOutput(); socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package Socket; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; import javax.xml.stream.util.StreamReaderDelegate; public class MyChatClient { public static void main(String[] args) { try { //表示客戶端連接的主機的地址 Socket socket=new Socket(MyChatServer.ADDRESS,MyChatServer.PORT); System.out.println("客戶端連接服務器成功"); System.out.println("請輸入想服務器發送的內容"); OutputStream outStream=socket.getOutputStream(); //把數據打印出來 DataOutputStream outWriter=new DataOutputStream(outStream) ; //給服務端發送的數據 System.out.println("寫給服務器的話"); Scanner sc=new Scanner(System.in); String strcontent=sc.nextLine(); outWriter.writeUTF(strcontent); //接收服務端發來的數據 InputStream inputStream=socket.getInputStream(); //把數據打印出來 DataInputStream dataRead=new DataInputStream(inputStream) ; String str; System.out.println("服務器傳來的數據"); while((str=dataRead.readUTF())!=null){ System.out.println(str); } System.out.println("從服務器傳過來的數據完畢"); System.out.println("通訊完畢"); socket.shutdownInput(); socket.shutdownOutput(); socket.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }