Java實現Socket的TCP傳輸執行個體
本文執行個體講述了Java實現Socket的TCP傳輸。分享給大家供大家參考。具體分析如下:
用戶端發資料到服務端
* Tcp傳輸,用戶端建立的過程。
* 1,建立tcp用戶端socket服務。使用的是Socket對象。
* 建議該對象一建立就明確目的地。要串連的主機。
* 2,如果串連建立成功,說明資料轉送通道已建立。
* 該通道就是socket流 ,是底層建立好的。 既然是流,說明這裡既有輸入,又有輸出。
* 想要輸入或者輸出資料流對象,可以找Socket來擷取。
* 可以通過getOutputStream(),和getInputStream()來擷取兩個位元組流。
* 3,使用輸出資料流,將資料寫出。
* 4,關閉資源。
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
package com.socket.tcp.demo; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; public class ClientDemo { /** * @param args * @throws IOException * @throws UnknownHostException */ public static void main(String[] args) throws UnknownHostException, IOException { //用戶端發資料到服務端 /* * Tcp傳輸,用戶端建立的過程。 * 1,建立tcp用戶端socket服務。使用的是Socket對象。 * 建議該對象一建立就明確目的地。要串連的主機。 * 2,如果串連建立成功,說明資料轉送通道已建立。 * 該通道就是socket流 ,是底層建立好的。 既然是流,說明這裡既有輸入,又有輸出。 * 想要輸入或者輸出資料流對象,可以找Socket來擷取。 * 可以通過getOutputStream(),和getInputStream()來擷取兩個位元組流。 * 3,使用輸出資料流,將資料寫出。 * 4,關閉資源。 */ //建立用戶端socket服務。 //串連目標伺服器的地址,192.168.1.100是目標伺服器的地址,10002是目標伺服器的連接埠 Socket socket = new Socket("192.168.1.100",10002); //擷取socket流中的輸出資料流。 向伺服器輸出訊息,即發訊息到伺服器 OutputStream out = socket.getOutputStream(); //使用輸出資料流將指定的資料寫出去。 out.write("tcp示範:哥們又來了!".getBytes()); //關閉資源。 socket.close(); } } |
服務端接收用戶端發送過來的資料,並列印在控制台上。
* 建立tcp服務端的思路:
* 1,建立服務端socket服務。通過ServerSocket對象。
* 2,服務端必須對外提供一個連接埠,否則用戶端無法串連。
* 3,擷取串連過來的用戶端對象。
* 4,通過用戶端對象擷取socket流讀取用戶端發來的資料
* 並列印在控制台上。
* 5,關閉資源。關用戶端,關服務端。
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
package com.socket.tcp.demo; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class ServerDemo { //UDP:發送端、接收端 (無串連) //TCP:用戶端、服務端 (要串連)先啟動服務端,在啟動用戶端 /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { //服務端接收用戶端發送過來的資料,並列印在控制台上。 /* * 建立tcp服務端的思路: * 1,建立服務端socket服務。通過ServerSocket對象。 * 2,服務端必須對外提供一個連接埠,否則用戶端無法串連。 * 3,擷取串連過來的用戶端對象。 * 4,通過用戶端對象擷取socket流讀取用戶端發來的資料 * 並列印在控制台上。 * 5,關閉資源。關用戶端,關服務端。 */ //1建立服務端對象。 ServerSocket ss = new ServerSocket(10002); //監聽應用所在伺服器的10002連接埠, //看有沒有用戶端串連過來,或者發送訊息 //2,擷取串連過來的用戶端對象。 Socket s = ss.accept();//阻塞式. String ip = s.getInetAddress().getHostAddress(); //擷取串連過來用戶端的IP地址 //3,通過socket對象擷取輸入資料流,要讀取用戶端發來的資料, InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); String text = new String(buf,0,len); System.out.println(ip+":"+text); s.close(); ss.close();//關閉伺服器,理論上是不用關的 } } |
運行:(先啟動服務端,後啟動用戶端)
希望本文所述對大家的java程式設計有所協助。