JAVA編程實現(xiàn)TCP網(wǎng)絡(luò)通訊的方法示例
本文實例講述了JAVA編程實現(xiàn)TCP網(wǎng)絡(luò)通訊的方法。分享給大家供大家參考,具體如下:
TCP(Transmission Control Protocol 傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。
由IETF的RFC 793定義,在簡化的計算機網(wǎng)絡(luò)OSI模型中,它完成第四層傳輸層所指定的功能。
基于TCP網(wǎng)絡(luò)通訊實現(xiàn)的類主要有服務(wù)器端的ServerSocket用客戶端的Socket。
通訊流程:
打開服務(wù)器,等待客戶端連接-->客戶端連接上服務(wù)器-->數(shù)據(jù)通訊。
代碼實現(xiàn)步驟:
1. 創(chuàng)建服務(wù)器端(ServerSocket)對象或客戶端(Socket)對象。
2. 建立起服務(wù)器與客戶端連接
3. 通過輸入輸出流進行文件(數(shù)據(jù))通訊
4. 通訊結(jié)束 ,關(guān)閉資源 。
一個簡單的小例子,服務(wù)端:
public class SocketServer {
public static void main(String[] args) {
try {
// 創(chuàng)建一個服務(wù)器ServerSocket,并指定端口號為5120
ServerSocket mServerSocket = new ServerSocket(5120);
// 等待客戶端連接
Socket socket = mServerSocket.accept();
// 連接上客戶端后,獲取客戶端輸入流信息
InputStream is = socket.getInputStream();
// 通過獲取緩沖數(shù)據(jù)方式來讀取文本信息
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// 獲取文本信息
String line;
StringBuffer sb = new StringBuffer();
while ((line = br.readLine()) != null) {
sb.append(line);
}
System.out.println(sb.toString());
socket.shutdownInput();
// 收到客戶端信息后,回復(fù)客戶端信息
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("收到回復(fù),我是服務(wù)端");
pw.flush();
// 關(guān)閉流通常放在finally中操作
os.close();
br.close();
is.close();
pw.close();
socket.close();
mServerSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客戶端:
public class ClientSocket {
public static void main(String[] args) {
try {
// 創(chuàng)建客戶端Socket,指定主機和端口
Socket mSocket = new Socket("localhost", 5120);
// 通過輸入流向服務(wù)器發(fā)數(shù)據(jù)
OutputStream os = mSocket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("來自客戶端Socket的數(shù)據(jù),你收到了嗎?");
pw.flush();
mSocket.shutdownOutput();
// 收取服務(wù)端的回復(fù)信息
InputStream is = mSocket.getInputStream();
// 通過獲取緩沖數(shù)據(jù)方式來讀取文本信息
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// 獲取文本信息
String line;
StringBuffer sb = new StringBuffer();
while ((line = br.readLine()) != null) {
sb.append(line);
}
System.out.println(sb.toString());
// 關(guān)閉流通常放在finally中操作
br.close();
is.close();
pw.close();
os.close();
mSocket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
運行時,要先啟動服務(wù)端,然后啟動客記戶端,通常網(wǎng)絡(luò)通訊會與多線程交織在一起。
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java Socket編程技巧總結(jié)》、《Java文件與目錄操作技巧匯總》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
關(guān)于Spring MVC在Controller層中注入request的坑詳解
這篇文章主要給大家介紹了關(guān)于Spring MVC在Controller層中注入request的坑的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04
IntelliJ?IDEA?2020.2.3永久破解激活教程(親測有效)
intellij?idea?2022是一款市面上最好的JAVA?IDE編程工具,該工具支持git、svn、github等版本控制工具,整合了智能代碼助手、代碼自動提示等功能,本教程給大家分享IDEA?2022最新永久激活碼,感興趣的朋友參考下吧2020-10-10
JSON字符串轉(zhuǎn)成java的Map對象詳細步驟
這篇文章主要介紹了如何將JSON字符串轉(zhuǎn)換為Java對象的步驟,包括定義Element類、使用Jackson庫解析JSON和添加依賴,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-01-01
mybatis-plus 新增/修改如何實現(xiàn)自動填充指定字段
這篇文章主要介紹了mybatis-plus 新增/修改實現(xiàn)自動填充指定字段方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06

