Java 網路編程

來源:互聯網
上載者:User

標籤:

一:OSI模型

Open System Interconnection 開放系統互聯

二:TCP/IP分層模型

TCP代表傳輸控制通訊協定:Transfer Control Protocol 允許兩個程式之前進行可靠的通訊

UDP代表使用者報文協議:User Datagram Protocol 允許兩個程式之前進行不可靠的通訊

三 用戶端 和 伺服器

四:通訊端

定義:Socket(通訊端)是一種抽象層,應用程式通過它來發送和接收資料

五:InetAddress類代表IP地址,沒有構造器但是有多個方法,查詢API文檔。

六:TCP通訊端編程

伺服器:

–1.利用ServerSocket建立對服務端某個連接埠的監聽。

  如:ServerSocket  server = new ServerSocket(8000);

–2.利用accept方法建立服務端Socket

  如:Socket socket = server.accept()

–3.利用已建立的socket建立輸入輸出資料流

  如:BufferedReader br = new BufferedReader( new InputStreamReader(socket.getInputStream()));    

–4.關閉輸入輸出資料流,關閉socket,關閉server

  如:  br.close(); 

  pw.close();

  socket.close();

 1 package inetAddress; 2  3 /** 4  * 伺服器 5  */ 6 import java.io.BufferedReader; 7 import java.io.BufferedWriter; 8 import java.io.InputStreamReader; 9 import java.io.OutputStreamWriter;10 import java.net.ServerSocket;11 import java.net.Socket;12 13 public class ServerTest {14 15     public static void main(String[] args) throws Exception {16         // 1建立ServerSocket對象指定連接埠號碼17         ServerSocket server = new ServerSocket(30001);18         server.setSoTimeout(10000);19         // 2等待客戶串連 accept 傳回型別Socket20         Socket socket = server.accept();21         // 3從用戶端讀資料 socket.getInputStream()22         BufferedReader reader = new BufferedReader(new InputStreamReader(23                 socket.getInputStream()));24         char[] ch = new char[100];25         int len = reader.read(ch);26         System.out.println("從用戶端接收到的訊息:");27         System.out.println(new String(ch, 0, len));28         // 3向用戶端寫資料 socket.getOutputStream()29         BufferedWriter write = new BufferedWriter(new OutputStreamWriter(30                 socket.getOutputStream()));31         write.write("我們已經接收到訊息了");32         write.flush();33         // 4 釋放資源34         reader.close();35         socket.close();36         write.close();37 38     }39 40 }

用戶端:

–1.建立用戶端Socket向伺服器發起串連請求

  如:Socket  socket = new Socket (“127.0.0.1”, 8000);

–2..利用已建立的socket建立輸入輸出資料流

  如:BufferedReader br = new BufferedReader( new InputStreamReader( socket.getInputStream()));    

–3.關閉輸入輸出資料流,關閉socket,關閉server

  如:  br.close(); 

  pw.close();

  socket.close();

 1 package inetAddress; 2  3 /** 4  * 用戶端 5  */ 6 import java.io.BufferedReader; 7 import java.io.BufferedWriter; 8 import java.io.InputStreamReader; 9 import java.io.OutputStreamWriter;10 import java.net.Socket;11 12 public class Cliebt {13 14     public static void main(String[] args) throws Exception {15         // 1 建立Socket對象 主機 連接埠16         Socket socket = new Socket("127.0.0.1", 30001);17         // 2向伺服器寫入資料 .getOutputStream()18         BufferedWriter write = new BufferedWriter(new OutputStreamWriter(19                 socket.getOutputStream()));20         write.write("你好伺服器");21         write.flush();22         // 2讀出資料 .getInputStream()23         BufferedReader reader = new BufferedReader(new InputStreamReader(24                 socket.getInputStream()));25         char[] ch = new char[100];26         int len = reader.read(ch);27         System.out.println("資料");28         System.out.println(new String(ch, 0, len));29         // 3 釋放資源30         reader.close();31         write.close();32         socket.close();33     }34 35 }

七:UDP通訊端編程

使用者報文協議(UDP)是用於將位元據從一台電腦發送到另一台計算的非連線協定。資料被稱為資料報包,它包含了資料將要發送到的目標伺服器和連接埠號碼。DatagramSocket類的send()和receive()方法都帶有一個DatagramPacket參數。 
 1 package chap18UDP; 2  3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6  7 /** 8  * 發送 9  * 10  * @author acer11  *12  */13 public class Sender {14 15     public static void main(String[] args) throws IOException {16         // * 1建立DatagramSocket對象17         DatagramSocket scoket = new DatagramSocket(3000);18         // *2 建立DatagramPacket對象19         byte[] buffer = "你好".getBytes();20         int port = 30001;21         DatagramPacket packet = new DatagramPacket(buffer, buffer.length,22                 scoket.getInetAddress().getLocalHost(), port);23         // 3 使用send24         scoket.send(packet);25         System.out.println("正在發送訊息");26         // 釋放資源27         scoket.close();28 29     }30 31 }

 

接收資料報包需要執行如下步驟:1. 建立一個足夠大的位元組數組,用於儲存要接收的包的資料。2. 使用該位元組數組執行個體化一個DatagramPacket對象。3. DatagramSocket被執行個體化,它被指定該通訊端要綁定到的本地主機上的一個連接埠。4. 調用DatagramSocket類的receive()方法,將DatagramPacket對象傳入該方法。這將導致執行線程阻塞,直到接收到一個資料報包或者發生了逾時
 1 package chap18UDP; 2  3 import java.net.DatagramPacket; 4 import java.net.DatagramSocket; 5  6 /** 7  * 接收 8  *  9  * @author acer10  *11  */12 public class Reciver {13 14     public static void main(String[] args) throws Exception {15         // 建立位元組數組16         byte[] buffer = new byte[1024];17         // 2 建立DatagramPacket對象18         DatagramPacket packet = new DatagramPacket(buffer, buffer.length);19         // 3 建立DatagramSocket對象20         DatagramSocket socket = new DatagramSocket(30001);21         // 4 使用receive方法22         socket.receive(packet);23         System.out.println("正在接收從" + packet.getSocketAddress() + "的資訊");24         System.out.println(new String(packet.getData()));25         // 釋放資源26         socket.close();27 28     }29 30 }
p發送資料報包需要執行如下步驟:•1. 建立一個足夠大的位元組數組,用於儲存要發送的包資料,用該資料填充數組。•2. 建立一個新的DatagramPacket 對象,用於儲存上面的位元組數組,以及伺服器名和接收者的連接埠號碼。•3. DatagramSocket被執行個體化,它被指定通訊端要綁定到本地主機的哪個連接埠。•4. DatagramSocket類的send()方法被調用,傳入DatagramPacket對象。

Java 網路編程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.