網路編程——基於TCP協議的Socket編程,基於UDP協議的Socket編程,socketudp

來源:互聯網
上載者:User

網路編程——基於TCP協議的Socket編程,基於UDP協議的Socket編程,socketudp

Socket編程

目前較為流行的網路編程模型是客戶機/伺服器通訊模式

客戶進程向伺服器處理序發出要求某種服務的請求,伺服器處理序響應該請求。,通常,一個伺服器處理序會同時為多個用戶端進程服務,圖中伺服器處理序B1同時為客戶進程A1、A2和B2提供服務。

 

Socket概述

①   所謂Socket通常也稱作“通訊端”,用於描述IP地址和連接埠,是一個通訊鏈的控制代碼。應用程式通常通過“通訊端”向網路發出請求或者應答網路請求。

②   Socket是串連運行在網路上的兩個程式間的雙向通訊的端點。

③   網路通訊其實指的就是Socket間的通訊。

④   通訊的兩端都有Socket,資料在兩個Socket之間通過IO來進行傳輸。

 

使用Socket進行網路通訊的過程

①   伺服器程式將一個通訊端綁定到一個特定的連接埠,並通過此通訊端等待和監聽客戶的串連請求。

②   客戶程式根據伺服器程式所在的主機和連接埠號碼發出串連請求。

③   如果一切正常,伺服器接受串連請求。並獲得一個新的綁定到不同連接埠地址的通訊端。

④   客戶和伺服器通過讀、寫通訊端進行通訊。

 

基於TCP協議的Socket編程

①   建立TCP服務端步驟:

a)         建立一個ServerSocket對象

b)         調用accept()方法接受用戶端請求

c)         從Socket中擷取I/O流

d)         對I/O流進行讀寫操作,完成與用戶端的互動

e)         關閉I/O流和Socket

②   建立TCP用戶端步驟:

a)         建立一個Socket對象

b)         從Socket中擷取I/O流

c)         對I/O流進行讀寫操作,完成與服務端的互動

d)         關閉I/O流和Socket

註:用戶端和服務端進行資料轉送時,用戶端的輸入資料流對應服務端的輸出資料流,用戶端的輸出資料流對應服務端的輸入資料流。

 

樣本:建立一個用戶端與服務端通訊的例子

包名:com.iotek.tcpsocket

服務端:

 1         // 1.建立一個ServerSocket對象 2         ServerSocket serverSocket = new ServerSocket(8888); 3         // 2.調用accept()方法接受用戶端請求 4         Socket socket = serverSocket.accept(); 5         System.out.println(socket.getInetAddress().getHostAddress() + "串連成功"); 6         // 3.擷取socket對象的輸入輸出資料流 7         BufferedReader br = new BufferedReader(new InputStreamReader( 8                 socket.getInputStream())); 9 10         PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);11         String line = null;12         // 讀取用戶端傳過來的資料13         while ((line = br.readLine()) != null) {14             if (line.equals("over")) {15                 break;16             }17             System.out.println(line);18             pw.println(line.toUpperCase());19         }20 21         pw.close();22         br.close();23         socket.close();24         System.out.println(socket.getInetAddress().getHostAddress() + "中斷連線");

 

用戶端:

 1         Socket socket = new Socket("127.0.0.1", 8888); 2         BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 3  4         PrintWriter pw = new PrintWriter(socket.getOutputStream(), true); 5         BufferedReader reader = new BufferedReader(new InputStreamReader( 6                 socket.getInputStream())); 7         while (true) { 8             String line = br.readLine();// 擷取鍵盤所輸入的字串 9             pw.println(line);10             if (line.equals("over")) {11                 break;12             }13             System.out.println(reader.readLine());// 擷取服務端傳過來的大寫字串14         }15         reader.close();16         br.close();17         pw.close();18         socket.close();

為了更直觀的看見通訊過程,將2個java程式複製到E盤根目錄下,用命令列的形式來運行。

開啟cmd,編譯java,步驟

① 進入e盤。  e:

② 編譯所有java檔案。 javac –d . *.java

③ 開啟服務端。    java com.iotek.tcpsocket.TCPServer

④ 再開啟一個cmd命令列用於開啟用戶端java com.iotek.tcpsocket.TCPClient

 串連成功

在用戶端輸入hello斷行符號之後測試成功。

輸入over,中斷連線

 

基於UDP協議的Socket編程

① 建立發送端

a)     建立DatagramSocket對象。該端點建立,系統會隨機分配一個連接埠。如果不想隨機配置,可以手動指定。

b)     將資料進行packet包的封裝,必須要指定目的地地址和連接埠。

c)     通過socket服務的send方法將該包發出。

d)     將socket關閉。

② 建立接收端

a)     建立DatagramSocket對象。要監聽一個連接埠。

b)     通過socket的receive方法將資料存入資料包中。

c)     通過資料包dp的方法getData()、getAddress()、getPort()等方法擷取包中的指定資訊。

d)     將socket關閉。

 

樣本:建立一個發送與接收的例子

發送端:UDPDemo1

 1         DatagramSocket socket = new DatagramSocket(); 2         String str = "i love you"; 3         // 把資料進行封裝到資料報包中 4         DatagramPacket packet = new DatagramPacket(str.getBytes(), 5                 str.length(), InetAddress.getByName("localhost"), 6666); 6         socket.send(packet);// 發送 7  8         byte[] buff = new byte[100]; 9         DatagramPacket packet2 = new DatagramPacket(buff, 100);10         socket.receive(packet2);11         System.out.println(new String(buff, 0, packet2.getLength()));12         socket.close();

 

接收端:UDPDemo2

 1         // 先接收資料 2         DatagramSocket socket = new DatagramSocket(6666); 3         byte[] buff = new byte[100]; 4         DatagramPacket packet = new DatagramPacket(buff, 100); 5         socket.receive(packet);// 接受傳來的資料包 6         System.out.println(new String(buff, 0, packet.getLength())); 7  8         // 發送資料 9         String str = "me too";10         DatagramPacket packet2 = new DatagramPacket(str.getBytes(),11                 str.length(), packet.getAddress(), packet.getPort());12         socket.send(packet2);13         socket.close();

 

將2個java程式複製到E盤根目錄下,用命令列的形式來運行。

開啟cmd,編譯java,步驟:

① 進入e盤。  e:

②   編譯以UDP開頭的檔案。 javac –d . UDP*.java

③   先運行接收端。  java com.iotek.tcpsocket.UDPDemo2

④   重新開啟一個命令列,運行發送端。  java com.iotek.tcpsocket.UDPDemo1

聯繫我們

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