網路編程【Socket網路編程】,socket網路編程

來源:互聯網
上載者:User

網路編程【Socket網路編程】,socket網路編程

java.net.InetAddress類:此類表示互連網協議 (IP) 地址。

靜態方法:
static InetAddress getLocalHost() 返回本地主機(你自己的使用的電腦)。
static InetAddress getByName(String host) 在給定主機名稱的情況下確定主機的 IP 位址。
非靜態方法:
String getHostAddress() 返回 IP 位址字串(以文本表現形式)。
String getHostName() 擷取此 IP 位址的主機名稱。


UDP通訊的接收端:接收發送端發送的資料報包,拆包
* 和udp相關的類:
* java.net.DatagramPacket:此類表示資料報包。
* 作用:使用資料報包,接收發送端的資料
* java.net.DatagramSocket:此類表示用來發送和接收資料報包的通訊端。
* 作用:發送資料報包,接收資料報包
* 通訊端:綁定IP地址和連接埠號碼的網路對象
*
* 構造方法:
* DatagramPacket(byte[] buf, int length)
* 構造 DatagramPacket,用來接收長度為 length 的資料包。
* DatagramSocket(int port)
* 建立資料通訊端並將其綁定到本地主機上的指定連接埠。
*
* 成員方法:
* void receive(DatagramPacket p) 從此通訊端接收資料報包。
*
* 實現步驟:
* 1.建立DatagramPacket對象,接收發送端的資料報
* 2.建立DatagramSocket對象,並且和系統要指定的連接埠號碼
* 3.使用DatagramSocket中的方法receive發送端接收資料報包
* 4.拆包
* DatagramPacket有和資料報包相關的方法
* int getLength() 擷取發送端資料的長度
* InetAddress getAddress() 擷取發送端的IP地址對象
* int getPort() 擷取發送端的連接埠號碼(系統隨機分配的)
* 5.釋放資源

 1 public static void main(String[] args) throws IOException { 2         //1.建立DatagramPacket對象,接收發送端的資料報 3         byte[] bytes = new byte[1024];//資料最大傳輸64kb  1024*64 4         DatagramPacket dp = new DatagramPacket(bytes, bytes.length); 5         //2.建立DatagramSocket對象,並且和系統要指定的連接埠號碼 6         DatagramSocket ds = new DatagramSocket(8888); 7         //3.使用DatagramSocket中的方法receive發送端接收資料報包 8         ds.receive(dp); 9         //4.拆包10         //int getLength()  擷取發送端資料的長度11         int length = dp.getLength();12         //InetAddress getAddress() 擷取發送端的IP地址對象13         String ip = dp.getAddress().getHostAddress();14         //int getPort()  擷取發送端的連接埠號碼(系統隨機分配的)15         int port = dp.getPort();16         17         System.out.println(new String(bytes,0,length)+"ip:"+ip+",連接埠號碼"+port);18         //5.釋放資源19         ds.close();20     }

UDP通訊的發送端:把資料進行封裝,根據接收端的IP地址和連接埠發送資料報包
*
* 和udp相關的類:
* java.net.DatagramPacket:此類表示資料報包。
* 作用:把資料和接收端的IP地址,連接埠號碼進行封裝
* java.net.DatagramSocket:此類表示用來發送和接收資料報包的通訊端。
* 作用:發送資料報包,接收資料報包
* 通訊端:綁定IP地址和連接埠號碼的網路對象
*
* 構造方法:
* DatagramPacket(byte[] buf, int length, InetAddress address, int port)
* 構造資料報包,用來將長度為 length 的包發送到指定主機上的指定連接埠號碼。
* DatagramSocket()
* 構造資料通訊端並將其綁定到本地主機上任何可用的連接埠。
*
* 成員方法:
* void send(DatagramPacket p) 從此通訊端發送資料報包。
*
* 實現步驟:
* 1.建立DatagramPacket對象,封裝資料和接收端的IP地址,連接埠號碼(建立集裝箱)
* 2.建立DatagramSocket對象(建立碼頭)
* 3.使用DatagramSocket中的方法send發送資料報包
* 4.釋放資源
*
* UDP通訊是面向無串連:不用管是否有接收端,都可以發送資料,沒有接收端會發生資料丟失

 1 public static void main(String[] args) throws IOException { 2         //1.建立DatagramPacket對象,封裝資料和接收端的IP地址,連接埠號碼(建立集裝箱) 3         byte[] bytes = "你好UDP!".getBytes(); 4         InetAddress address = InetAddress.getByName("127.0.0.1"); 5         DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, 8888); 6         //2.建立DatagramSocket對象(建立碼頭) 7         DatagramSocket ds = new DatagramSocket(); 8         //3.使用DatagramSocket中的方法send發送資料報包 9         ds.send(dp);10         //4.釋放資源11         ds.close();12     }

TCP通訊的用戶端:向伺服器發送請求串連,接收伺服器回寫的資料
*
* 表示用戶端的類:
* java.net.Socket:此類實現用戶端通訊端(也可以就叫“通訊端”)。
*
* 構造方法:
* Socket(InetAddress address, int port) 建立一個流通訊端並將其串連到指定 IP 位址的指定連接埠號碼。
* Socket(String host, int port) 建立一個流通訊端並將其串連到指定主機上的指定連接埠號碼。
*
* 成員方法:
* OutputStream getOutputStream() 返回此通訊端的輸出資料流。
* InputStream getInputStream() 返回此通訊端的輸入資料流。
*
* 注意:用戶端和伺服器進行資料互動,不能使用自己建立的流對象,必須使用Socket中提供的流
*
* 實現步驟:
* 1.建立用戶端Socket對象,綁定伺服器的IP地址和連接埠號碼
* 2.使用Socket中的方法getOutputStream擷取網路輸出資料流
* 3.使用OutputStream網路流中的方法write給伺服器發送資料
* 4.使用Socket中的方法getInputStream擷取網路輸入資料流
* 5.使用InputStream網路流中的方法read讀取伺服器回寫的資料
* 6.釋放資源
*
* 注意:TCP是連線導向通訊,必須先啟動伺服器,在啟動用戶端,如果伺服器沒有啟動
* 則會拋出ConnectException: Connection refused: connect

 1 public static void main(String[] args) throws IOException { 2         //1.建立用戶端Socket對象,綁定伺服器的IP地址和連接埠號碼 3         Socket socket = new Socket("127.0.0.1", 9999); 4         //2.使用Socket中的方法getOutputStream擷取網路輸出資料流 5         OutputStream os = socket.getOutputStream(); 6         //3.使用OutputStream網路流中的方法write給伺服器發送資料 7         os.write("你好伺服器".getBytes()); 8         //4.使用Socket中的方法getInputStream擷取網路輸入資料流 9         InputStream is = socket.getInputStream();10         //5.使用InputStream網路流中的方法read讀取伺服器回寫的資料11         byte[] bytes = new byte[1024];12         int len = is.read(bytes);13         System.out.println(new String(bytes,0,len));14         //6.釋放資源15         socket.close();16     }

TCP通訊的伺服器端:接收用戶端的發送的資料,給用戶端回寫資料
*
* 表示伺服器的類:
* java.net.ServerSocket:此類實現伺服器通訊端。
*
* 構造方法:
* ServerSocket(int port) 建立綁定到特定連接埠的伺服器通訊端。
*
* 有一件特別重要的事:伺服器必須的知道是哪個用戶端請求的伺服器
* 所有可以使用accept方法擷取請求的用戶端
* 成員方法:
* Socket accept() 偵聽並接受到此通訊端的串連。
*
* 實現步驟:
* 1.建立ServerSocket對象,和系統要指定的連接埠號碼
* 2.使用ServerSocket中的方法accept擷取請求的用戶端對象
* 3.使用Socket中的方法getInputStream擷取網路輸入資料流
* 4.使用InputStream網路流中的方法read讀取用戶端發送的資料
* 5.使用Socket中的方法getOutputStream擷取網路輸出資料流
* 6.使用OutputStream網路流中的方法write給用戶端回寫資料
* 7.釋放資源(ServerSocket,Socket)

 1 public static void main(String[] args) throws IOException { 2         //1.建立ServerSocket對象,和系統要指定的連接埠號碼 3         ServerSocket server = new ServerSocket(9999); 4         //2.使用ServerSocket中的方法accept擷取請求的用戶端對象 5         Socket socket = server.accept(); 6         //3.使用Socket中的方法getInputStream擷取網路輸入資料流 7         InputStream is = socket.getInputStream(); 8         byte[] bytes = new byte[1024]; 9         //4.使用InputStream網路流中的方法read讀取用戶端發送的資料10         int len = is.read(bytes);11         System.out.println(new String(bytes,0,len));12         //5.使用Socket中的方法getOutputStream擷取網路輸出資料流13         OutputStream os = socket.getOutputStream();14         //6.使用OutputStream網路流中的方法write給用戶端回寫資料15         os.write("收到".getBytes());16         //7.釋放資源(ServerSocket,Socket)17         socket.close();18         server.close();19     }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.