摘要:編程之編程全套的基礎(chǔ)編程基礎(chǔ)及深入講解協(xié)議是面向連接的可靠的有序的以字節(jié)流的方式發(fā)送數(shù)據(jù),通過三次握手方式建立連接,形成傳輸數(shù)據(jù)的通道,在連接中進行大量數(shù)據(jù)的傳輸,效率會稍低中基于協(xié)議實現(xiàn)網(wǎng)絡(luò)通信的類客戶端的類服務(wù)器端的類通信的步驟創(chuàng)建和打
Java Socket編程之TCP編程
全套的:https://www.yuque.com/shizhiy...
基礎(chǔ):https://blog.51cto.com/wangdy/1588379
Java Socket編程基礎(chǔ)及深入講解:https://www.cnblogs.com/yiwangzhibujian/p/7107785.html
TCP協(xié)議是面向連接的、可靠的、有序的、以字節(jié)流的方式發(fā)送數(shù)據(jù),通過三次握手方式建立連接,形成傳輸數(shù)據(jù)的通道,在連接中進行大量數(shù)據(jù)的傳輸,效率會稍低
Java中基于TCP協(xié)議實現(xiàn)網(wǎng)絡(luò)通信的類
客戶端的Socket類
服務(wù)器端的ServerSocket類
Socket通信的步驟
? ? ? ? ? ? ? ? ① 創(chuàng)建ServerSocket和Socket
? ? ? ? ? ? ? ? ② 打開連接到Socket的輸入/輸出流
? ? ? ? ? ? ? ? ③ 按照協(xié)議對Socket進行讀/寫操作
? ? ? ? ? ? ? ? ④ 關(guān)閉輸入輸出流、關(guān)閉Socket
服務(wù)器端:
? ? ? ? ? ? ? ?① 創(chuàng)建ServerSocket對象,綁定監(jiān)聽端口
? ? ? ? ? ? ? ? ② 通過accept()方法監(jiān)聽客戶端請求
? ? ? ? ? ? ? ? ③ 連接建立后,通過輸入流讀取客戶端發(fā)送的請求信息
? ? ? ? ? ? ? ? ④ 通過輸出流向客戶端發(fā)送鄉(xiāng)音信息
? ? ? ? ? ? ? ? ⑤ 關(guān)閉相關(guān)資源
**
/** * 基于TCP協(xié)議的Socket通信,實現(xiàn)用戶登錄,服務(wù)端 */ //1、創(chuàng)建一個服務(wù)器端Socket,即ServerSocket,指定綁定的端口,并監(jiān)聽此端口 ServerSocket serverSocket = new ServerSocket(10086);//1024-65535的某個端口 //2、調(diào)用accept()方法開始監(jiān)聽,等待客戶端的連接 Socket socket = serverSocket.accept(); //3、獲取輸入流,并讀取客戶端信息 InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String info = null; while ((info = br.readLine()) != null) { System.out.println("我是服務(wù)器,客戶端說:" + info); } socket.shutdownInput();//關(guān)閉輸入流 //4、獲取輸出流,響應(yīng)客戶端的請求 OutputStream os = socket.getOutputStream(); PrintWriter pw = new PrintWriter(os); pw.write("歡迎您!"); pw.flush(); //5、關(guān)閉資源 pw.close(); os.close(); br.close(); isr.close(); is.close(); socket.close(); serverSocket.close();
客戶端:
? ? ? ? ? ? ? ? ① 創(chuàng)建Socket對象,指明需要連接的服務(wù)器的地址和端口號
? ? ? ? ? ? ? ? ② 連接建立后,通過輸出流想服務(wù)器端發(fā)送請求信息
? ? ? ? ? ? ? ? ③ 通過輸入流獲取服務(wù)器響應(yīng)的信息
? ? ? ? ? ? ? ? ④ 關(guān)閉響應(yīng)資源?
//客戶端 //1、創(chuàng)建客戶端Socket,指定服務(wù)器地址和端口 Socket socket =newSocket("localhost",10086); //2、獲取輸出流,向服務(wù)器端發(fā)送信息 OutputStream os = socket.getOutputStream();//字節(jié)輸出流 PrintWriter pw =newPrintWriter(os);//將輸出流包裝成打印流 pw.write("用戶名:admin;密碼:123"); pw.flush(); socket.shutdownOutput(); //3、獲取輸入流,并讀取服務(wù)器端的響應(yīng)信息 InputStream is = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String info = null; while((info=br.readLine())!null){ System.out.println("我是客戶端,服務(wù)器說:"+info); } //4、關(guān)閉資源 br.close(); is.close(); pw.close(); os.close(); socket.close();
應(yīng)用多線程實現(xiàn)服務(wù)器與多客戶端之間的通信
? ? ? ? ? ? ? ① 服務(wù)器端創(chuàng)建ServerSocket,循環(huán)調(diào)用accept()等待客戶端連接
? ? ? ? ? ? ? ② 客戶端創(chuàng)建一個socket并請求和服務(wù)器端連接
? ? ? ? ? ? ? ③ 服務(wù)器端接受苦讀段請求,創(chuàng)建socket與該客戶建立專線連接
? ? ? ? ? ? ? ④ 建立連接的兩個socket在一個多帶帶的線程上對話
? ? ? ? ? ? ? ⑤ 服務(wù)器端繼續(xù)等待新的連接 ? ??
//服務(wù)器線程處理 //和本線程相關(guān)的socket Socket socket =null; // public serverThread(Socket socket){ this.socket = socket; } publicvoid run(){ //服務(wù)器處理代碼 } //============================================ //服務(wù)器代碼 ServerSocket serverSocket =newServerSocket(10086); Socket socket =null; int count =0;//記錄客戶端的數(shù)量 while(true){ socket = serverScoket.accept(); ServerThread serverThread =newServerThread(socket); serverThread.start(); count++; System.out.println("客戶端連接的數(shù)量:"+count); }
[鏈接]()
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/74377.html
摘要:如地址端口號組成了所謂的,是網(wǎng)絡(luò)上運行的程序之間雙向通信鏈路的終結(jié)點,是和的基礎(chǔ)套接字網(wǎng)絡(luò)上具有唯一標識的地址和端口組合在一起才能構(gòu)成唯一能識別的標識符套接字。 更多物聯(lián)網(wǎng)高并發(fā)編程知識請移步:https://www.yuque.com/shizhiy... Java Socket編程之常識網(wǎng)絡(luò)基礎(chǔ)知識 網(wǎng)絡(luò)基礎(chǔ)知識(參考計算機網(wǎng)絡(luò))? 《TCP/IP協(xié)議棧及OSI參考模型詳解》? ...
摘要:面向字節(jié)流流,指的是流入到進程或從進程流出的字符序列。即收到連接信息后向返回確認信息第三次握手客戶端收到服務(wù)器的報文段,并向服務(wù)器發(fā)送報文段。 前言 Socket的使用在 Android網(wǎng)絡(luò)編程中非常重要 今天我將帶大家全面了解 Socket 及 其使用方法 目錄 showImg(https://segmentfault.com/img/remote/14600000113508...
摘要:如果你想體驗原味編程,用開頭的比較適合否則建議使用流函數(shù)。有關(guān)流的知識,請參考本人之前的博文回顧之流。接下來我們用流函數(shù)實現(xiàn)一個簡單的客戶端和服務(wù)端。流函數(shù)中的和兩個函數(shù)是我們想要的。本文目的是簡要介紹中的編程,行文到此已經(jīng)達到目的。 轉(zhuǎn)載請注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請求 cookie w...
摘要:構(gòu)造函數(shù)默認空閑的最大連接數(shù)為個,的時間為秒通過構(gòu)造函數(shù)可以看出默認的空閑的最大連接數(shù)為個,的時間為秒。實例化實例化是在實例化時進行的在的構(gòu)造函數(shù)中調(diào)用了省略省略緩存操作提供對進行操作的方法分別為和幾個操作。 1.引子 在了解OkHttp的復(fù)用連接池之前,我們首先要了解幾個概念。 TCP三次握手 通常我們進行HTTP連接網(wǎng)絡(luò)的時候我們會進行TCP的三次握手,然后傳輸數(shù)據(jù),然后再釋放連接...
閱讀 4721·2021-09-10 11:22
閱讀 603·2019-08-30 11:17
閱讀 2626·2019-08-30 11:03
閱讀 481·2019-08-29 11:18
閱讀 3524·2019-08-28 17:59
閱讀 3274·2019-08-26 13:40
閱讀 3254·2019-08-26 10:29
閱讀 1207·2019-08-26 10:14