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)于Java中攔截mybatis并輸出完整sql語句的方法
這篇文章主要介紹了關(guān)于Java中攔截mybatis并輸出完整sql語句的方法,假如項目中有很多很多的SQL我們不可能一一的去修改解決。這個時候我們就需要通過mybatis攔截SQL并且最終修改SQL,需要的朋友可以參考下2023-08-08解決idea中Springboot找不到BASE64Encoder或Decoder的jar包
這篇文章主要介紹了解決idea中Springboot找不到BASE64Encoder或Decoder的jar包,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12SpringBoot之@ConditionalOnProperty注解使用方法
在平時業(yè)務(wù)中,我們需要在配置文件中配置某個屬性來決定是否需要將某些類進行注入,讓Spring進行管理,而@ConditionalOnProperty能夠?qū)崿F(xiàn)該功能,文中有詳細的代碼示例,需要的朋友可以參考下2023-05-05Java中Maven項目導(dǎo)出jar包配置的示例代碼
這篇文章主要介紹了Java中Maven項目導(dǎo)出jar包配置的示例代碼,需要的朋友可以參考下2018-11-11MyBatis-Plus中如何實現(xiàn)動態(tài)表名
這篇文章主要介紹了MyBatis-Plus中如何實現(xiàn)動態(tài)表名問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07