個人網(wǎng)站有哪些舉例抖音營銷
目錄
一.常見的軟件架構(gòu)、網(wǎng)絡(luò)編程三要素、IP
二.利用UDP發(fā)送與接收數(shù)據(jù)
三.改聊天室
四.組播案例
五.TCP通信案例
一.常見的軟件架構(gòu)、網(wǎng)絡(luò)編程三要素、IP
網(wǎng)絡(luò)編程:在網(wǎng)絡(luò)通信協(xié)議下,不同的計算機上運行的程序進行的數(shù)據(jù)傳輸 在Java中可以使用java.net包下的技術(shù)輕松開發(fā)出常見的網(wǎng)絡(luò)應用程序常見的軟件架構(gòu):BS/CS 1.CS是什么架構(gòu)? ClientAndServer(客戶端與服務(wù)器)本地客戶端需要下載安裝客戶端程序,遠程還有一個服務(wù)端程序 2.BS是什么架構(gòu)? BrowserAndServer(瀏覽器與服務(wù)器)只需要一個瀏覽器,用戶通過不同的網(wǎng)址訪問不同的服務(wù)器 , 3.BS架構(gòu)的優(yōu)點與缺點? 不需要開發(fā)客戶端,只需要頁面與服務(wù)端,但是如果需要傳遞的數(shù)據(jù)過多過大就不適合使用網(wǎng)頁了 很多時候都需要保存在本地-這就是客戶端的形成,畫面更加精美,4.網(wǎng)絡(luò)編程三要素有哪些? 如果要對對方傳輸數(shù)據(jù) (1).確定對方的網(wǎng)絡(luò)地址:IP(設(shè)備在網(wǎng)絡(luò)中的地址,是唯一標識) (2).確定對方的接收數(shù)據(jù)的軟件:端口號(應用程序在設(shè)備中的唯一標識) (3).確定網(wǎng)絡(luò)傳輸?shù)囊?guī)則:協(xié)議(數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸規(guī)則:如UDP,TCP,http,https,ftp)5.IP的含義與常見的IP類型? Internet Protocol,是互聯(lián)網(wǎng)協(xié)議地址,也稱IP地址:是分配給上網(wǎng)設(shè)備的數(shù)字標簽 常見的IP分為IPv4與IPv66.什么是IPv4,地址長度為多少位?分為多少組?IP在轉(zhuǎn)換的時候有沒有負數(shù)? Internet Protocol(協(xié)議) version4:互聯(lián)網(wǎng)通信協(xié)議第四版(正式開始使用的就是第四版) 采用32位地址長度,分為4組,每一組1字節(jié),每組最大就是255 用點分十進制表示就是:192.168.1.66,注意IP在轉(zhuǎn)換的時候沒有負數(shù) 所有IP加起來不到43億個,在2019.11.26這些IP已經(jīng)被全部分配完畢7.什么是IPv6?地址長度為多少為?分為多少組?一般用什么表示?可以如何省略? Internet Protocol version6:互聯(lián)網(wǎng)通信協(xié)議第六版 采用128位地址長度,分為8組,每組兩個字節(jié)(這數(shù)量有生之年不可能用的完了) 用冒分十六進制表示就是:2001:0DBB:0000:0023:0008:0800:200C:417A 一般省略每一組前面的0:2001:DBB:0:23:8:200C:417A 如果中間有很多0:就可以使用0位壓縮表示法:FF01:0:0:0:0:0:0:1101->FF01::11018.IPv4的地址分類有哪兩種? 一類是公網(wǎng)IP(萬維網(wǎng)使用),一類是私有地址(局域網(wǎng)使用) 私有地址: A類 10.0.0.0 --10.255.255.255 B類 172.16.0.0–172.31.255.255 C類 192.168.0.0–192.168.255.255 比如192.168開頭的就是私有地址,范圍就是192.168.0.0--192.168.255.255,專門為組織機構(gòu)內(nèi)部使用,以此節(jié)省IP9.私有地址是公網(wǎng)地址嗎? 比如在網(wǎng)吧中,不是每一臺電腦都有一個公網(wǎng)的IP,一般是共享同一個公網(wǎng)IP,再由路由器給每臺電腦分配局域網(wǎng)IP,由此節(jié)約IP10.特殊IP:127.0.0.1:也可以是localhost是什么地址? 是送回地址,也是本地回環(huán)地址,成為本機IP,永遠只會尋找當前所在的本機 如果電腦要發(fā)送消息:假如自己的Ip是192.168.1.100,如果發(fā)消息給自己這個IP,要先發(fā)送到路由器,再由路由器分配消息 不是每個路由器分配給你的IP是一樣的,自己給自己發(fā)送數(shù)據(jù)就寫127.0.0.111.常見的cmd命令有哪些? ipConfig+ping(也能檢查局域網(wǎng)是否暢通)IP地址類:InetAddress 有兩個子類:一個是IPv4,一個是IPv6,會自動判斷是哪個版本的再去創(chuàng)建其子類對象 12.如何創(chuàng)建IP地址對象? 13.如何通過IP對象獲取主機名與IP地址?
public class Demo331 {public static void main(String[] args) throws UnknownHostException {System.out.println("12.使用InetAddress的靜態(tài)方法去創(chuàng)建對象,可以傳入IP,也能傳入主機名");InetAddress IP1 = InetAddress.getByName("127.0.0.1");System.out.println(IP1);InetAddress IP2 = InetAddress.getByName("SUNCOYA-COMPUTER");System.out.println(IP2);System.out.println("13.通過getHostName方法獲取主機名(如果局域網(wǎng)中沒有這一臺主機,那下面的輸出就是以ip形式表示的)");System.out.println(IP2.getHostName());System.out.println("通過getHostAddress方法獲取IP地址");System.out.println(IP2.getHostAddress());}
}
?
?
二.利用UDP發(fā)送與接收數(shù)據(jù)
1.端口號是什么?由多少字節(jié)表示?端口號的范圍為?什么范圍的端口號被占用? 應用程序在設(shè)備中的唯一標識,由兩個字節(jié)表示的整數(shù),范圍為0-65535 0-1023端口用于知名的網(wǎng)絡(luò)服務(wù)或者是應用,一個端口號只能被一個應用使用。協(xié)議:連接和通信的規(guī)則被稱為網(wǎng)絡(luò)通信協(xié)議 下面兩個是傳輸層協(xié)議: 2.什么是UDP?有什么特點? (User Datagram Protocol) 是面向無連接通信協(xié)議(數(shù)據(jù)直接發(fā)送,不檢查兩臺電腦是否可以連通,愛要不要), 傳輸速度快,有大小限制,一次最多發(fā)送64K,數(shù)據(jù)不安全,容易丟失數(shù)據(jù) 用于丟一點數(shù)據(jù)不太影響功能的應用:語音通話網(wǎng)絡(luò)會議可以使用 3.什么是TCP?有什么特點? (Transmission Control Protocol(傳輸控制協(xié)議)) 是面向連接的通信協(xié)議,速度慢,沒有大小限制,數(shù)據(jù)安全 比如發(fā)送郵件4.利用UDP發(fā)送數(shù)據(jù)的具體步驟? 以快遞為例 1.找快遞公司2.打包禮物3.快遞公司發(fā)送包裹4.付錢走人
public class Demo332 {public static void main(String[] args) throws IOException {System.out.println("(1)使用DatagramSocket(數(shù)據(jù)包套接字)創(chuàng)建對象的時候可以指定端口:如果不指定,隨機使用一個端口發(fā)");DatagramSocket ds = new DatagramSocket();System.out.println("(2)使用DatagramPacket包裹信息:數(shù)據(jù),長度,IP,端口");byte[] bytes = "你好UDP協(xié)議!".getBytes();InetAddress IP = InetAddress.getByName("127.0.0.1");int port = 10086;DatagramPacket dp = new DatagramPacket(bytes,bytes.length,IP,port);System.out.println("(3)使用datagramSocket對象的send方法發(fā)送datagramPacket數(shù)據(jù)");ds.send(dp);System.out.println("(4)釋放datagramSocket資源");ds.close();}
}
1.利用UDP接受數(shù)據(jù)數(shù)據(jù):以快遞為例 1.找快遞公司2.接收打包3.在箱子里面找禮物(解析數(shù)據(jù))4.簽收走人(釋放資源)2.接收端與發(fā)送端的運行順序有要求嗎? 先運行接收端,再運行發(fā)送端,下面的控制臺能夠切換
public class Demo333 {public static void main(String[] args) throws IOException {System.out.println("(1)創(chuàng)建接收端的DatagramSocket對象,需要指定發(fā)送端的端口");DatagramSocket ds = new DatagramSocket(10086);System.out.println("(2)新建datagramPacket對象,接收對象需要的數(shù)組與長度也需要傳遞");byte[] bytes = new byte[1024];DatagramPacket dp = new DatagramPacket(bytes,bytes.length);System.out.println("使用ds的receive方法接收對象,方法是阻塞的:程序執(zhí)行到這里會死等數(shù)據(jù)的到來");ds.receive(dp);System.out.println("(3)使用dp的get數(shù)據(jù)方法解析數(shù)據(jù)包");byte[] data = dp.getData();int length = dp.getLength();InetAddress IP = dp.getAddress();int port = dp.getPort();//變成字符串注意一下長度System.out.println(new String(data,0,length)+"\n數(shù)據(jù)長度:"+length+"\n數(shù)據(jù)發(fā)送地址:"+IP+"\n端口:"+port);System.out.println("(4)關(guān)閉接收端");ds.close();}
}
?
?
?
?
三.改聊天室
1.如何使一個類的運行變成多個不同的線程? 在右上角的類名點擊Edit Configurations,ModifyOptions選擇第一個,使一個類能重復運行多次 2.datagramPacket類中傳入的數(shù)據(jù)如果是字符串轉(zhuǎn)換的byte數(shù)組,傳入長度的時候應該注意什么? 傳入的應該是byte數(shù)組的長度
public class Demo334 {public static void main(String[] args) throws IOException {DatagramSocket ds = new DatagramSocket();Scanner scanner = new Scanner(System.in);while (true) {String input = scanner.nextLine();byte[] bytes = input.getBytes();//這里的長度一開始傳錯了,注意不要傳字符串的長度DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("127.0.0.1"), 10086);ds.send(dp);//如果不關(guān)閉的話就變成了一個聊天室:多個人能夠從這里面看到數(shù)據(jù)if ("886".equals(input)) break;}ds.close();}
}
public class Demo335 {public static void main(String[] args) throws IOException {DatagramSocket ds = new DatagramSocket(10086);byte[] message = new byte[1024];DatagramPacket dp = new DatagramPacket(message,message.length);while (true){ds.receive(dp);String str = new String(dp.getData(),0,dp.getLength());InetAddress IP = dp.getAddress();int port = dp.getPort();System.out.println("IP為:"+IP+"端口為:"+port+"向10086端口發(fā)送了數(shù)據(jù):");System.out.println(str);if ("886".equals(str))break;}ds.close();}
}
?
?
四.組播案例
單播:只給一臺設(shè)備發(fā)送數(shù)據(jù) 組播:給一組設(shè)備發(fā)送數(shù)據(jù)(224.0.0.0—239.255.255.255)其中(224.0.0.0-224.0.0.255)256個為預留的組播地址) 廣播:給局域網(wǎng)中所有的電腦發(fā)送數(shù)據(jù)255.255.255.255(四字節(jié)都是最大),廣播就不試了,把單播的地址改為255.255.255.255即可
public class Demo336_MultyCast_Send {public static void main(String[] args) throws IOException {System.out.println("1.創(chuàng)建組播對象MulticastSocket(組播套接字)");MulticastSocket ms = new MulticastSocket();System.out.println("2.打包數(shù)據(jù)也是一樣的流程");String s = "Hello, MulticastSocket";byte[] bytes = s.getBytes();System.out.println("IP指定為組播地址(不知道為什么224.0.0.1不行)");InetAddress IP = InetAddress.getByName("224.0.0.2");int port = 10000;DatagramPacket dp = new DatagramPacket(bytes,bytes.length,IP,port);System.out.println("3.使用組播套接字對象發(fā)送數(shù)據(jù)");ms.send(dp);ms.close();}
}
public class Demo337_MultiCast_Receive {public static void main(String[] args) throws IOException {System.out.println("1.創(chuàng)建組播套接字,并設(shè)置接收端口");MulticastSocket ms = new MulticastSocket(10000);System.out.println("2.將本機添加到224.0.0.2當中,往后就是接收,解析,關(guān)閉");ms.joinGroup(InetAddress.getByName("224.0.0.2"));byte[] bytes = new byte[1024];DatagramPacket dp = new DatagramPacket(bytes,bytes.length);ms.receive(dp);String ip = dp.getAddress().getHostAddress();String name = dp.getAddress().getHostName();int port = dp.getPort();byte[] data = dp.getData();System.out.println("ip為"+ip+",主機名為"+name+"的及設(shè)備的端口號"+port+"發(fā)送了數(shù)據(jù)");System.out.println(new String(data,0,data.length));ms.close();}
}
?
?
?
?
五.TCP通信案例
TCP在通信的兩端各建立一個Socket對象:通信之前要確保連接已經(jīng)建立 通過IO流來進行網(wǎng)絡(luò)通信三次握手協(xié)議建立連接 1.客戶端向服務(wù)器發(fā)送請求等待服務(wù)器確認 2.服務(wù)器向客戶端返回請求,告訴客戶端收到了請求 3.客戶端向服務(wù)器再次發(fā)出確認消息,連接建立 TCP設(shè)計成三次握手的目的就是為了避免重復連接,因為會有多次請求的情況四次揮手協(xié)議斷開連接:需要確保連接通道里面的數(shù)據(jù)已經(jīng)全部處理完(多的那一步) 1.客戶端向服務(wù)器發(fā)送取消連接請求 2.服務(wù)端向客戶端返回響應,表示已經(jīng)收到了客戶端的請求,需要等服務(wù)器處理完最后的數(shù)據(jù) 3.一旦處理完成,服務(wù)器向客戶端再次發(fā)出確認需要取消連接的消息 4.客戶端再次發(fā)送確認消息,取消連接客戶端
public class Demo338_TCP_Client {public static void main(String[] args) throws IOException {System.out.println("1.傳入IP地址與端口號,建立Socket對象");System.out.println("在創(chuàng)建對象的時候會連接服務(wù)器,如果連接不上會報錯");Socket socket = new Socket("127.0.0.1",10000);System.out.println("2.通過套接字對象獲取字節(jié)輸出流,向客戶端輸入數(shù)據(jù)");OutputStream os = socket.getOutputStream();os.write("Hello, TCP!".getBytes());System.out.println("3.關(guān)閉socket也可以關(guān)閉輸出流");socket.close();}
}
服務(wù)器端
public class Demo339_TCP_Server {public static void main(String[] args) throws IOException {System.out.println("1.創(chuàng)建服務(wù)端的ServerSocket對象,端口需要與客戶端需要連接的端口保持一致");ServerSocket ss = new ServerSocket(10000);System.out.println("2.調(diào)用accept方法等待客戶端連接,返回Socket對象");System.out.println("沒有人連就會卡死在這一行代碼,需要在這里獲取Socket對象");Socket socket = ss.accept();System.out.println("3.獲取輸入流");InputStream is = socket.getInputStream();System.out.println("在這里一次性獲得了所有的字節(jié),因為此處比較簡單,別的情況下中文可能會亂碼,可以使用轉(zhuǎn)換流");byte[] bytes = is.readAllBytes();System.out.println(new String(bytes));System.out.println("4.關(guān)閉socket對象,相當于斷開與客戶端的連接");socket.close();System.out.println("5.關(guān)閉serverSocket對象,相當于終結(jié)服務(wù)器資源");ss.close();}
}
?