Java實現TCP通訊程式
目錄
1 概述
TCP通訊能實現兩臺計算機之間的資料互動,通訊的兩端,要嚴格區分為客戶端(Client)與服務端(Server)。
兩端通訊時步驟:
- 服務端程式先啟動,等待客戶端的連線。
- 客戶端請求連線服務端,連線成功才能通訊。服務端不可以主動連線客戶端。
在Java中,提供了兩個類用於實現TCP通訊程式:
- 服務端:
java.net.ServerSocket
類。建立ServerSocket
物件,相當於開啟一個服務,並等待客戶端的連線。 - 客戶端:
java.net.Socket
類。建立Socket
物件,向服務端發出連線請求,服務端響應請求,兩者建立連線,開始通訊。
2 ServerSocket類(服務端)
ServerSocket
類:實現了伺服器套接字,該類物件等待通過網路的請求。
套接字指的是兩臺裝置之間通訊的端點。
2.1 構造方法
public ServerSocket(int port)
:建立一個ServerSocket物件,並將其繫結到一個指定的埠號上,引數port就是埠號。
構造舉例,程式碼如下:
ServerSocket server = new ServerSocket(6666);
2.2 成員方法
public Socket accept()
:偵聽並接受連線,返回一個新的Socket物件,用於和客戶端實現通訊。該方法會一直阻塞直到建立連線。
3 Socket類(客戶端)
Socket
類:該類實現客戶端套接字。
3.1 構造方法
-
public Socket(String host, int port)
:建立套接字物件並將其連線到指定主機上的指定埠號。
如果指定的host是null ,則相當於指定地址為回送地址。小貼士:回送地址(127.x.x.x) 是本機回送地址(Loopback Address),主要用於網路軟體測試以及本地機程式間通訊,無論什麼程式,一旦使用回送地址傳送資料,立即返回,不進行任何網路傳輸。
構造舉例,程式碼如下:
Socket client = new Socket("127.0.0.1", 6666);
3.2 成員方法
1 public InputStream getInputStream()
: 返回此套接字的輸入流。
- 如果此Scoket具有相關聯的通道,則生成的InputStream 的所有操作也關聯該通道。
- 關閉生成的InputStream也將關閉相關的Socket。
2 public OutputStream getOutputStream()
: 返回此套接字的輸出流。
- 如果此Scoket具有相關聯的通道,則生成的OutputStream 的所有操作也關聯該通道。
- 關閉生成的OutputStream也將關閉相關的Socket。
3 public void close()
:關閉此套接字。
- 一旦一個socket被關閉,它不可再使用。
- 關閉此socket也將關閉相關的InputStream和OutputStream 。
4 public void shutdownOutput()
: 禁用此套接字的輸出流。
- 任何先前寫出的資料將被髮送,隨後終止輸出流。
4 簡單的TCP通訊程式
4.1 TCP通訊步驟解析
- 【服務端】啟動,建立ServerSocket物件,等待連線。
- 【客戶端】啟動,建立Socket物件,請求連線。
- 【服務端】接收連線,呼叫accept方法,並返回一個Socket物件。
- 【客戶端】Socket物件獲取OutputStream,向服務端寫出資料。
- 【服務端】Scoket物件獲取InputStream,讀取客戶端傳送的資料。
到此,客戶端向服務端傳送資料成功。
自此,服務端向客戶端回寫資料。
- 【服務端】Socket物件,獲取OutputStream,向客戶端回寫資料。
- 【客戶端】Scoket物件,獲取InputStream,解析回寫資料。
- 【客戶端】釋放資源,斷開連線。
4.2 客戶端向伺服器傳送資料
服務端實現:
public class ServerTCP {
public static void main(String[] args) throws IOException {
System.out.println("服務端啟動 , 等待連線 .... ");
// 1.建立 ServerSocket物件,繫結埠,開始等待連線
ServerSocket ss = new ServerSocket(6666);
// 2.接收連線 accept 方法, 返回 socket 物件.
Socket server = ss.accept();
// 3.通過socket 獲取輸入流
InputStream is = server.getInputStream();
// 4.一次性讀取資料
// 4.1 建立位元組陣列
byte[] b = new byte[1024];
// 4.2 據讀取到位元組陣列中.
int len = is.read(b);
// 4.3 解析陣列,列印字串資訊
String msg = new String(b, 0, len);
System.out.println(msg);
//5.關閉資源.
is.close();
server.close();
}
}
客戶端實現:
public class ClientTCP {
public static void main(String[] args) throws Exception {
System.out.println("客戶端 傳送資料");
// 1.建立 Socket ( ip , port ) , 確定連線到哪裡.
Socket client = new Socket("localhost", 6666);
// 2.獲取流物件 . 輸出流
OutputStream os = client.getOutputStream();
// 3.寫出資料.
os.write("你好麼? tcp ,我來了".getBytes());
// 4. 關閉資源
os.close();
client.close();
}
}
4.3 伺服器向客戶端回寫資料
服務端實現:
public class ServerTCP {
public static void main(String[] args) throws IOException {
System.out.println("服務端啟動 , 等待連線 .... ");
// 1.建立 ServerSocket物件,繫結埠,開始等待連線
ServerSocket ss = new ServerSocket(6666);
// 2.接收連線 accept 方法, 返回 socket 物件.
Socket server = ss.accept();
// 3.通過socket 獲取輸入流
InputStream is = server.getInputStream();
// 4.一次性讀取資料
// 4.1 建立位元組陣列
byte[] b = new byte[1024];
// 4.2 據讀取到位元組陣列中.
int len = is.read(b);
// 4.3 解析陣列,列印字串資訊
String msg = new String(b, 0, len);
System.out.println(msg);
// =================回寫資料=======================
// 5. 通過 socket 獲取輸出流
OutputStream out = server.getOutputStream();
// 6. 回寫資料
out.write("我很好,謝謝你".getBytes());
// 7.關閉資源.
out.close();
is.close();
server.close();
}
}
客戶端實現:
public class ClientTCP {
public static void main(String[] args) throws Exception {
System.out.println("客戶端 傳送資料");
// 1.建立 Socket ( ip , port ) , 確定連線到哪裡.
Socket client = new Socket("localhost", 6666);
// 2.通過Scoket,獲取輸出流物件
OutputStream os = client.getOutputStream();
// 3.寫出資料.
os.write("你好麼? tcp ,我來了".getBytes());
// ==============解析回寫=========================
// 4. 通過Scoket,獲取 輸入流物件
InputStream in = client.getInputStream();
// 5. 讀取資料資料
byte[] b = new byte[100];
int len = in.read(b);
System.out.println(new String(b, 0, len));
// 6. 關閉資源 .
in.close();
os.close();
client.close();
}
}
相關文章
- 網路通訊2:TCP通訊實現TCP
- C語言實現TCP通訊C語言TCP
- Go語言實現TCP通訊GoTCP
- JAVASE網路程式設計之TCP實現聊天通訊Java程式設計TCP
- java多執行緒實現TCP網路Socket程式設計(C/S通訊)Java執行緒TCP程式設計
- Java:基於TCP協議網路socket程式設計(實現C/S通訊)JavaTCP協議程式設計
- java實現UDP通訊JavaUDP
- TCP通訊客戶端和服務端簡單程式碼實現TCP客戶端服務端
- 使用Java實現WebSocket通訊JavaWeb
- TCP通訊TCP
- Go語言實現的簡易TCP通訊框架GoTCP框架
- golang實現子程式通訊Golang
- JAVA通訊(三)——實現多人聊天Java
- Vert.x TCP 通訊實踐TCP
- modbus tcp通訊TCP
- TCP和UDP實現簡單一對一通訊TCPUDP
- Linux Shell 指令碼實現 tcp/upd 協議通訊Linux指令碼TCP協議
- 通過 Socket 實現 TCP 程式設計入門TCP程式設計
- java tcp網路通訊 傳輸檔案JavaTCP
- Java&Python的TCP&UDP通訊-網路程式設計JavaPythonTCPUDP程式設計
- JAVA通訊(二)——實現客戶機和伺服器通訊Java伺服器
- 通過 App Groups 實現程式間通訊APP
- golang有現成的tcp通訊框架嗎?GolangTCP框架
- 網路通訊3:TCP互動通訊TCP
- 網路通訊2:TCP簡單通訊TCP
- 在 OpenResty 裡實現程式間通訊REST
- 實現不同程式之間的通訊
- 程式間通訊的另類實現
- Java的通過管道來實現執行緒通訊Java執行緒
- Zsh 開發指南(第十七篇 使用 socket 檔案和 TCP 實現程式間通訊)TCP
- Java進階:基於TCP通訊的網路實時聊天室JavaTCP
- Linux TCP通訊示例LinuxTCP
- Android TCP socket通訊AndroidTCP
- NModbus4 TCP通訊TCP
- Python 基於 TCP 傳輸協議的網路通訊實現PythonTCP協議
- 詳解 CmProcess 跨程式通訊的實現
- 利用windows api實現程式通訊(命名管道)WindowsAPI
- 使用AIDL實現程式間的通訊AI