摘要:編程之編程全套的基礎(chǔ)編程基礎(chǔ)及深入講解協(xié)議是面向連接的可靠的有序的以字節(jié)流的方式發(fā)送數(shù)據(jù),通過三次握手方式建立連接,形成傳輸數(shù)據(jù)的通道,在連接中進(jìn)行大量數(shù)據(jù)的傳輸,效率會(huì)稍低中基于協(xié)議實(shí)現(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ù)的通道,在連接中進(jìn)行大量數(shù)據(jù)的傳輸,效率會(huì)稍低
Java中基于TCP協(xié)議實(shí)現(xiàn)網(wǎng)絡(luò)通信的類
客戶端的Socket類
服務(wù)器端的ServerSocket類
Socket通信的步驟
? ? ? ? ? ? ? ? ① 創(chuàng)建ServerSocket和Socket
? ? ? ? ? ? ? ? ② 打開連接到Socket的輸入/輸出流
? ? ? ? ? ? ? ? ③ 按照協(xié)議對(duì)Socket進(jìn)行讀/寫操作
? ? ? ? ? ? ? ? ④ 關(guān)閉輸入輸出流、關(guān)閉Socket
服務(wù)器端:
? ? ? ? ? ? ? ?① 創(chuàng)建ServerSocket對(duì)象,綁定監(jiān)聽端口
? ? ? ? ? ? ? ? ② 通過accept()方法監(jiān)聽客戶端請(qǐng)求
? ? ? ? ? ? ? ? ③ 連接建立后,通過輸入流讀取客戶端發(fā)送的請(qǐng)求信息
? ? ? ? ? ? ? ? ④ 通過輸出流向客戶端發(fā)送鄉(xiāng)音信息
? ? ? ? ? ? ? ? ⑤ 關(guān)閉相關(guān)資源
**
/** * 基于TCP協(xié)議的Socket通信,實(shí)現(xiàn)用戶登錄,服務(wù)端 */ //1、創(chuàng)建一個(gè)服務(wù)器端Socket,即ServerSocket,指定綁定的端口,并監(jiān)聽此端口 ServerSocket serverSocket = new ServerSocket(10086);//1024-65535的某個(gè)端口 //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)客戶端的請(qǐ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對(duì)象,指明需要連接的服務(wù)器的地址和端口號(hào)
? ? ? ? ? ? ? ? ② 連接建立后,通過輸出流想服務(wù)器端發(fā)送請(qǐng)求信息
? ? ? ? ? ? ? ? ③ 通過輸入流獲取服務(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)用多線程實(shí)現(xiàn)服務(wù)器與多客戶端之間的通信
? ? ? ? ? ? ? ① 服務(wù)器端創(chuàng)建ServerSocket,循環(huán)調(diào)用accept()等待客戶端連接
? ? ? ? ? ? ? ② 客戶端創(chuàng)建一個(gè)socket并請(qǐng)求和服務(wù)器端連接
? ? ? ? ? ? ? ③ 服務(wù)器端接受苦讀段請(qǐng)求,創(chuàng)建socket與該客戶建立專線連接
? ? ? ? ? ? ? ④ 建立連接的兩個(gè)socket在一個(gè)多帶帶的線程上對(duì)話
? ? ? ? ? ? ? ⑤ 服務(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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/74377.html
摘要:如地址端口號(hào)組成了所謂的,是網(wǎng)絡(luò)上運(yùn)行的程序之間雙向通信鏈路的終結(jié)點(diǎn),是和的基礎(chǔ)套接字網(wǎng)絡(luò)上具有唯一標(biāo)識(shí)的地址和端口組合在一起才能構(gòu)成唯一能識(shí)別的標(biāo)識(shí)符套接字。 更多物聯(lián)網(wǎng)高并發(fā)編程知識(shí)請(qǐng)移步:https://www.yuque.com/shizhiy... Java Socket編程之常識(shí)網(wǎng)絡(luò)基礎(chǔ)知識(shí) 網(wǎng)絡(luò)基礎(chǔ)知識(shí)(參考計(jì)算機(jī)網(wǎng)絡(luò))? 《TCP/IP協(xié)議棧及OSI參考模型詳解》? ...
摘要:面向字節(jié)流流,指的是流入到進(jìn)程或從進(jìn)程流出的字符序列。即收到連接信息后向返回確認(rèn)信息第三次握手客戶端收到服務(wù)器的報(bào)文段,并向服務(wù)器發(fā)送報(bào)文段。 前言 Socket的使用在 Android網(wǎng)絡(luò)編程中非常重要 今天我將帶大家全面了解 Socket 及 其使用方法 目錄 showImg(https://segmentfault.com/img/remote/14600000113508...
摘要:如果你想體驗(yàn)原味編程,用開頭的比較適合否則建議使用流函數(shù)。有關(guān)流的知識(shí),請(qǐng)參考本人之前的博文回顧之流。接下來我們用流函數(shù)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的客戶端和服務(wù)端。流函數(shù)中的和兩個(gè)函數(shù)是我們想要的。本文目的是簡(jiǎn)要介紹中的編程,行文到此已經(jīng)達(dá)到目的。 轉(zhuǎn)載請(qǐng)注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請(qǐng)求 cookie w...
摘要:構(gòu)造函數(shù)默認(rèn)空閑的最大連接數(shù)為個(gè),的時(shí)間為秒通過構(gòu)造函數(shù)可以看出默認(rèn)的空閑的最大連接數(shù)為個(gè),的時(shí)間為秒。實(shí)例化實(shí)例化是在實(shí)例化時(shí)進(jìn)行的在的構(gòu)造函數(shù)中調(diào)用了省略省略緩存操作提供對(duì)進(jìn)行操作的方法分別為和幾個(gè)操作。 1.引子 在了解OkHttp的復(fù)用連接池之前,我們首先要了解幾個(gè)概念。 TCP三次握手 通常我們進(jìn)行HTTP連接網(wǎng)絡(luò)的時(shí)候我們會(huì)進(jìn)行TCP的三次握手,然后傳輸數(shù)據(jù),然后再釋放連接...
閱讀 4549·2021-09-10 11:22
閱讀 530·2019-08-30 11:17
閱讀 2564·2019-08-30 11:03
閱讀 430·2019-08-29 11:18
閱讀 3455·2019-08-28 17:59
閱讀 3218·2019-08-26 13:40
閱讀 3157·2019-08-26 10:29
閱讀 1136·2019-08-26 10:14