【Java】網路程式設計(NIO/BIO)
阿新 • • 發佈:2020-09-08
網路程式設計
1).認識網路名詞
IP地址:表示網路上的一臺主機,邏輯地址
MAC地址:表示網路上的一臺主機,實體地址
埠:標識主機中的一個程序 0 – 65535, 1024一下為預留埠
協議:通訊雙方之間的約定和標準
物理層 –> 資料鏈路層 –> 網路層 –> 傳輸層 –> 會話層 –> 表示層 –> 應用層
傳輸層:
TCP:傳輸控制協議,面向連線的,是可靠的 (Transmission Control Protocol)
UDP:使用者資料報協議,非面向連線的,不可靠的 (User Datagram Protocol)
2).TCP程式設計(Transmission Control Protocol)
TCP: Socket 程式設計(套接字) ServerSocket Socket (伺服器端用兩個) java包:java.net.*; 用法:如下 -------------------------------------------------------------- TCP: 模擬客戶端與伺服器端的通訊程式碼:先啟動伺服器端 客戶端(Client): public static void main(String[] args) throws Exception { Socket s = new Socket(“192.168.77.13”, 9000); //向伺服器發起連線,引數分別是ip和埠 InputStream is = new s.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); for(int i = 1; i <= 20; i++) { String str = br.readLine(); //從伺服器端讀 System.out.println(str); } s.close(); } 伺服器端(Service) public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(9000); //伺服器程序繫結埠為9000 Socket s = ss.accept();//接受訪問 OutputStream os = s.getOutputStream(); PrintWriter out = new PrintWriter(os); for(int I = 1; I <= 20; i++) { out.println(“Hello” + i); //向客戶端寫 out.flush(); Thread.sleep(200); } s.close(); }
3).UDP程式設計(User Datagram Protocol)
UDP:Socket 程式設計 DatagramSocket DatagramPacket java包:java.net.*; 用法:如下 -------------------------------------------------------------- UDP: 模擬客戶端與伺服器端的通訊程式碼:先啟動伺服器端 客戶端(Client):向伺服器端送一封信 public static void main(String[] args) throws Exception { //先發一封信 DatagramSocket ds = new DatagramSocket(); String str = “這裡是客戶端的信”; byte[] b = str.getBytes(); //可以設定編碼方式 DatagramPacket sendLetter = new DatagramPacket(b, 0, b.length, InetAddress.getLocalHost(), 9090);//傳送信,前三個引數為信的內容,後兩個引數分別為本地IP和送信埠埠 ds.send(sendLetter); //接受30封信 for(int I = 0; I < 30; I++) { DatagramPacket receiveLetter = new DatagramPacket(new byte[100], 0, 100); ds.receive(receiveLetter); byte[] bs = receiveLetter.getData(); int offset = receiveLetter.getOffset(); int length = receiveLetter.getLength(); String newStr = new String(bs, offset, length);//將陣列轉化為字串 } ds.close(); } 伺服器端(Server):從客戶端端收信,返回30封信 public static void main(String[] args) throws Exception { DatagramSocket ds = new DatagramSocket(9090); DatagramPacket receiveLetter = new DatagramPacket(new byte[100], 0 , 100);//將接收的信內容存入byte陣列 ds.receive(receiveLetter); InetAddress address = receiveLetter.getAddress(); //獲得客戶端地址 int port = receiveLetter.getPort();//獲取來信客戶端的埠 //給客戶端傳送30封信 forI(int I = 0; I <= 30; i++) { String str = “這是伺服器端的信”; byte[] b = str.getBytes(); DatagramPacket sendLetter = new DatagramPacket(b, 0, b.length, address, port); ds.send(sendLetter); Thread.sleep(200); } ds.close(); }
4).URL程式設計(Uniform Resource Locator)
URL程式設計是在應用層, 統一資源定位器
格式(字串):協議名://主機地址:埠號/相對路徑
java包 java.net.*;
用法:
public static void main(String[] args) throws Exception {
URL url = new URL(“http://192.168.77.13/corejava.txt”);//建立url
URLConnection uc = url.openConnection(); //開啟連線
InputStream is = uc.getInputStream(); //讀取
BufferedReader br = new BufferedReader(new InputStreamReader(is));//橋轉換
while(true) {
String str = br.readLine();
if(Str == null)
break;
System.out.println(str);
}
in.close();
}