日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java运用网络编程技术代码_Java 网络编程

發布時間:2024/1/23 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java运用网络编程技术代码_Java 网络编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java網絡編程

1、什么叫計算機網絡?

由不同地理位置的不同計算機主機,連接起來組成的網絡。

2、什么叫網絡編程?

在網絡的基礎上,使用網絡進行編程,對應用層進行設計的活動。

3、網絡編程三要素:IP地址、端口、通訊協議

IP地址

1、在計算機網絡中某個計算機的唯一標識

2、在計算機網絡中,現在命名IP地址的規定是IPv4協議,該協議規定每個IP地址由4個0-255之間的數字組成(也就是32位),一共有2^32個,超過40億。IP地址是一個32位的二進制數,通常被分割為4個“8位二進制數”(也就是4個字節)。IP地址通常用“點分十進制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之間的十進制整數。

3、由于IP地址不好記憶,所以有了域名,一個域名對應一個ip,但一個IP可以對應很多域名。類似于一個人可以有很多微信,但一個微信只對應一個人。

4、IPv6是下一版本的互聯網協議,也可以說是下一代互聯網的協議,它的提出最初是因為隨著互聯網的迅速發展,IPv4定義的有限地址空間將被耗盡,而地址空間的不足必將妨礙互聯網的進一步發展。為了擴大地址空間,擬通過IPv6以重新定義地址空間。IPv4采用32位地址長度,只有大約43億個地址,而IPv6采用128位地址長度,幾乎可以不受限制地提供地址。

5、IP地址編址方式:A、B、C、D、E五類地址

(1)A類地址是指:IP地址的四段地址中只有第一段為網絡號碼,其余三段為計算機本地號碼。

A類IP地址 地址范圍1.0.0.1到127.255.255.254

二進制表示為:00000001 00000000 00000000 00000001 - 01111111 11111111 11111111 11111110。最后一個是廣播地址。(最高位必須是0),子網掩碼:255.0.0.0

(2)B類地址是指:在IP地址的四段號碼中,前兩段號碼為網絡號碼。

B類IP地址地址范圍128.0.0.1-191.255.255.254

二進制表示為:10000000 00000000 00000000 00000001----10111111 11111111 11111111 11111110。 最后一個是廣播地址。(最高位必須是10),B類IP地址的子網掩碼為255.255.0.0。

(3)C類地址是指:在IP地址的四段號碼中,前三段號碼為網絡號碼,剩下的一段號碼為本地計算機的號碼。

C類IP地址范圍192.0.0.1-223.255.255.254

二進制表示為: 11000000 00000000 00000000 00000001 - 11011111 11111111 11111111 11111110。(最高位必須是110)

C類IP地址的子網掩碼為255.255.255.0

(4)D類IP地址在歷史上被叫做多播地址(multicast address),即組播地址。

多播地址的最高位必須是“1110”,范圍從224.0.0.0到239.255.255.255。

(5)IP地址中凡是以“11110”開頭的E類IP地址都保留用于將來和實驗使用

(6)特殊IP:

0.0.0.0 對應當前主機

255.255.255.255對應當前子網的廣播地址

127.0.0.1到127.255.255.255用于回路測試,127.0.0.1對應本機IP地址

端口

1、是一個數字,用來標記電腦里的某個進程。

2、使用兩個字節表示端口,0-65535,意味著計算機中同時運行的進程最多有65536個

當一個程序運行時,需要一個端口號,運行結束后,端口號被收回

3、作用:一個計算機上可以并發運行多個網絡程序,而不會在互相之間產生干擾。一個進程在網絡中進行通訊時,先通過IP地址找到電腦,然后通過端口找到對應進程。

4、程序運行時可以指定端口號,也可以隨機分配。0-1024是系統需要的端口號

通訊協議

1、通訊雙方在信息交互時,對信息的封裝和解析的規則,就稱為協議

2、訊協議又稱通信規程,是指通信雙方對數據傳送控制的一種約定。約定中包括對數據格式,同步方式,傳送速度,傳送步驟,檢糾錯方式以及控制字符定義等問題做出統一規定,通信雙方必須共同遵守,它也叫做鏈路控制規程。

3、應用層:http協議、https協議、FTP協議

傳輸層:UDP協議、TCP協議

網絡層:IP協議

物理層:底層硬件設備、數據的完整和校驗

網絡的幾種結構

1、客戶端/服務器結構,也叫做Client/Server結構,簡稱C/S結構(需要三次握手)

2、瀏覽器/服務器結構,也叫做Browser/Server結構,簡稱為B/S結構

3、P2P結構

java中的網絡編程技術

1、java 為我們提供了一個InetAddress類,該類的功能是代表一個IP地址,并且將IP地址和域名相關的操作方法包含在該類的內部。

2、獲取方式:

getByName(String host):根據主機名稱獲取當前類型對象

getByAddress(byte[] arr):根據ip地址的字節數組獲取當前類型對象

getAllByName(String host):根據主機名稱獲取的所有當前類型對象的數組

getLocalHost():獲取當前主機的當前類型對象

3、對象的常用方法:

getHostName():獲取主機名稱

getAddress():獲取ip地址的字節數組

toString():同時獲取主機名稱和ip地址的字符串表示

4、代碼示例

importjava.net.InetAddress;importjava.util.Arrays;public classTest1 {public static void main(String[] args) throwsException {//獲取主機名稱的IP地址

InetAddress ip1 = InetAddress.getByName("www.baidu.com");

System.out.println(ip1);

String s1=ip1.getHostName();//獲取主機名

byte[] b1 = ip1.getAddress();//獲取原始地址

System.out.println(s1+"..."+Arrays.toString(b1));

System.out.println("---------------------------------");//根據ip地址的字節數組獲取當前類型對象

byte[] b2 = {61,-121,-87,125};

InetAddress ip2=InetAddress.getByAddress(b2);

System.out.println(ip2);

System.out.println("---------------------------------");//根據本地回環地址獲取當前類型對象

byte[] b3 = {127, 0, 0, 1};

InetAddress ip3=InetAddress.getByAddress(b3);

System.out.println(ip3);

System.out.println(ip3.getHostName()+ "..." +Arrays.toString(ip3.getAddress()));

System.out.println("---------------------------------");//獲取本機當前類型對象

InetAddress ip4 =InetAddress.getLocalHost();

System.out.println(ip4);

System.out.println(ip4.getHostName()+ "..." +Arrays.toString(ip4.getAddress()));

}

}

UDP協議和TCP協議

1、都是傳輸層協議,端到端協議。

2、區別:

UDP協議面向無連接,像發短信,寄信,先發送的消息未必先到達,不安全,效率高,只區分發送端和接收端,而不區分客戶端和服務端

TCP協議面向連接,像打電話,先發送的消息一定是先到,安全,效率低,區分客戶端和服務端。在連接的時候,會有三次握手的動作。

3、Socket? 兩臺計算機的通訊點,類似于碼頭、郵局。。。

Socket:也稱為套接字,套接字編程:網絡編程、通信點編程(端到端編程)

不同的協議中,使用的Socket對象各不相同:UDP協議中,使用的是DatagramSocket;在TCP協議中,客戶端使用的是Socket、服務端使用的ServerSocket和Socket

UDP的編程實現

1、使用的Socket是DatagramSocket

2、構造方法

DatagramSocket():不指定端口號,創建通信點,端口號隨機分配,一般用于發送端

DatagramSocket(int port):指定端口號,創建通信點,一般用于接收端

3、成員方法

send(DatagramPacket dp):將一個dp數據報包發送

receive(DatagramPacket dp):將數據接收到dp參數中

4、DatagramPacket介紹:

1、表示一個數據報數據的封裝對象的類型

2、構造方法:

DatagramPacket(byte[]?buf, int?offset, int?length, InetAddress?address, int?port)

buf:要發送的數據的字節數組

offset:從數組的哪個位置開始發送

length:發送多少數據

address:發送到哪個ip

port:發送到哪個程序

3、常用成員方法:

getData():返回該數據包中的字節數組

getLength():返回該數據包中接收到的字節個數

5、UDP編程步驟

發送端:

1、準備通訊點對象

2、準備要發送的包裹對象

3、調用通訊點的發送方法

接受端:

1、準備通訊點對象

2、準備接收端的接收容器

3、調用接收方法

4、解析收到的數據

importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetAddress;importjava.util.Scanner;public classSend {public static void main(String[] args) throwsException {

String host= "127.0.0.1";//創建發送端

DatagramSocket ds = newDatagramSocket();//要發送的數據

Scanner sc = newScanner(System.in);while(true) {//循環發送時要注意socket兩邊步驟要保持一致

System.out.println("要發送的內容:");byte[] buf =sc.nextLine().getBytes();//目標地

InetAddress address =InetAddress.getByName(host);//創建包

DatagramPacket dp = new DatagramPacket(buf, 0, buf.length,address, 9999);

ds.send(dp);

System.out.println("是否繼續?1是,0否");if("1".equals(sc.nextLine())) {continue;

}else break;

}

sc.close();

ds.close();//注意關閉資源

}

}

發送端

importjava.net.DatagramPacket;importjava.net.DatagramSocket;public classReceive {public static void main(String[] args) throwsException {

DatagramSocket ds= new DatagramSocket(9999);//接收端要指定端口號

while(true) {byte[] buf = new byte[1024];//創建接收容器

DatagramPacket dp = newDatagramPacket(buf, buf.length);

ds.receive(dp);//調用接收方法

byte[] data =dp.getData();int len =dp.getLength();

System.out.println(new String(data,0,len));//解析內容

}

}

}

接收端

TCP的編程實現

1、使用的通訊點就是Socket類型

2、客戶端和服務端獲取Socket對象的區別:

1、客戶端使用Socket的構造方法,創建一個Socket對象

2、服務端不能使用自己創建的方式,而是使用服務端一個特殊的對象ServerSocket,接收客戶端發來的請求,生成一個為這個客戶端服務的Socket對象

3、構造方法:

Socket(InetAddress ip, int port):建立一個通信點,專門用于和ip主機的port程序進行通信。

只要這個對象創建成功了,就說明這個連接已經建立起來了,就說明當前的客戶端已經聯系上服務端了,已經獲取了服務端返回的響應。

在創建對象的過程,就是在請求和服務端連接的過程。

4、服務端獲取Socket對象的方式:

1、啟動一個服務程序,類型是ServerSocket,可以接收客戶端發來的連接請求,一旦接收到請求,就可以創建一個和當前客戶端交互的Socket對象

2、ServerSocket的構造方法

ServerSocket(int port):創建一個服務端Socket對象,等待訪問port端口的客戶端(監聽此端口)

3、accept():接收一個客戶端發來的請求,返回一個服務此客戶端的Socket對象

5、獲取客戶端和服務端的連接

1、兩個方法:

InputStream ?getInputStream():獲取Socket對象的網絡輸入流

OutputStream ?getOutputStream():獲取Socket對象的網絡輸出流

2、一旦獲取了輸入輸出流,就可以通過I\O的方式,來操作網絡數據的傳輸。

3、對應關系:

客戶端的網絡輸入流,對應服務端的網絡輸出流

客戶端的網絡輸出流,對應服務端的網絡輸入流

6、TCP編程步驟

客戶端:

1、創建Socket對象,建立和服務端的連接

2、獲取網絡輸入流和輸出流

3、通過I/O的操作進行數據的傳輸

服務器端:

1、創建ServerSocket對象,開啟服務器,監聽端口

2、調用accept方法,接收客戶端請求,返回Socket對象

3、獲取網絡輸入流和輸出流

4、通過I/O的操作進行數據的傳輸

importjava.io.BufferedReader;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;importjava.io.PrintStream;importjava.net.InetAddress;importjava.net.Socket;importjava.util.Scanner;public classTCPClient {public static void main(String[] args) throwsException {//String s = "10.10.92.184";

InetAddress s =InetAddress.getLocalHost();int port = 9999;while(true) {//注意,客戶端和服務器端要保證流程一致//創建客戶端通訊點

Socket socket = newSocket(s,port);

OutputStream os=socket.getOutputStream();//使用打印流進行包裝

PrintStream ps = newPrintStream(os);//獲得網絡輸入流

Scanner sc = newScanner(System.in);

ps.println(sc.nextLine());//獲得網絡輸出流

InputStream is =socket.getInputStream();//使用轉換流進行包裝

InputStreamReader isr = newInputStreamReader(is);//使用高效緩沖流進行包裝

BufferedReader br = newBufferedReader(isr);

System.out.println(br.readLine());

}

}

}

加強版客戶端

importjava.io.BufferedReader;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;importjava.io.PrintStream;importjava.net.ServerSocket;importjava.net.Socket;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;public classServer {public static void main(String[] args) throwsException {//創建服務器端ServerSocket對象,監聽9999端口,接受客戶端的請求

ServerSocket ss = new ServerSocket(9999);//創建線程池,避免浪費資源

ExecutorService es = Executors.newFixedThreadPool(10);while(true) {//接受客戶端的請求

Socket s = ss.accept();//阻塞式方法//使用匿名內部類方法創建多線程,使服務器可以和多個客戶端通訊

Runnable r = newRunnable() {public voidrun() {try{//獲得輸入流

InputStream is =s.getInputStream();//轉換流包裝

InputStreamReader isr = newInputStreamReader(is);//高效緩沖流包裝

BufferedReader br = newBufferedReader(isr);

System.out.println(s.getLocalAddress()+"..."+s.getPort()+"..."+br.readLine());//獲得輸出流

OutputStream os =s.getOutputStream();//打印流包裝

PrintStream ps = newPrintStream(os);

ps.println("收到");

}catch(Exception e) {

e.printStackTrace();

}

}

};

es.submit(r);//加入線程池

}

}

}

加強版服務器

7、TCP編程加強

1、讓客戶端也接收數據,服務端也發送數據

2、讓字節流進行加強,轉成字符流,加強成緩沖字符流

3、讓服務端多線程,同時可以處理多個用戶的請求

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的java运用网络编程技术代码_Java 网络编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。