網(wǎng)絡編程

1TCP協(xié)議:類似已婚家庭可靠性高需要三次握手需要對方反饋是否收到若其中一端關閉服務端也會跟著關閉TCP比較專一(啟動時要先開啟服務端在開啟客戶端)
需要2端服務端(Server)


package org.example;

import java.io.DataInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.ServerSocket;

import java.net.Socket;

public class Server {

public static void main(String[]args)throws Exception {

System.out.println("----服務端啟動成功-------" );

//創(chuàng)建Server對象,同時為服務端注冊端口

        ServerSocket serverSocket=new ServerSocket(8888);

//        需要使用Server對象,使用一個accept方法,等待客戶端的連接請求

        Socket socket=serverSocket.accept();

//        從socket通信管道中得到一個字節(jié)輸入流

        InputStream is=socket.getInputStream();

//        把原始的字節(jié)輸入流包裝成數(shù)據(jù)輸入流

        DataInputStream dis=new DataInputStream(is);

while (true) {

//        使用數(shù)據(jù)輸入流讀取客戶端發(fā)送過來的消息

            try {

String rs=dis.readUTF();

System.out.println(rs);

//        獲取客戶端的IP地址

                System.out.println(socket.getRemoteSocketAddress());

}catch (IOException e) {

System.out.println(socket.getRemoteSocketAddress()+"離線了:");

dis.close();

socket.close();

break;

}

//            dis.close();

//            socket.close();

        }

}

}

客戶端(Client)


import java.io.IOException;

import java.io.OutputStream;

import java.net.Socket;

import java.util.Scanner;

public class Client {

public static void main(String[]args)throws Exception {

//        創(chuàng)建socket對象

        Socket socket=new  Socket("127.0.0.1",8888);

//        從socket通信管道中得到一個字節(jié)輸出流,用來 發(fā)數(shù)據(jù)給服務程序.

        OutputStream os =socket.getOutputStream();

//把低級的字節(jié)輸出流包裝成數(shù)據(jù)輸出流

        DataOutputStream dos =new DataOutputStream(os);

Scanner sc=new Scanner(System.in);

while (true) {

System.out.println("請輸入");

String msg=sc.nextLine();

if ("exit".equals(msg)){

System.out.println("歡迎您下次光臨,突出成功!");

break;

}

dos.writeUTF(msg);

dos.flush();

//        開始寫數(shù)據(jù)出去了

//            dos.writeUTF("在一起,好嗎?");

        }

//        dos.close();

//

//

//        socket.close();

    }

}

TCP(傳輸控制協(xié)議)是一種面向連接的、可靠的壳快、基于字節(jié)流的傳輸層協(xié)議纸巷。它是互聯(lián)網(wǎng)協(xié)議套件中的一部分,用于在網(wǎng)絡上可靠地傳輸數(shù)據(jù)眶痰。

以下是 TCP 協(xié)議的一些關鍵特點:

面向連接:在通信之前瘤旨,客戶端和服務器之間建立一個連接。連接的建立包括三次握手過程竖伯,確保雙方都準備好發(fā)送和接收數(shù)據(jù)存哲。

可靠性:TCP 提供了可靠的數(shù)據(jù)傳輸因宇。它通過序列號、確認應答和重傳機制來確保數(shù)據(jù)的可靠性祟偷。如果發(fā)送方發(fā)送的數(shù)據(jù)包丟失或損壞羽嫡,接收方會請求重傳,直到數(shù)據(jù)正確接收為止肩袍。

流量控制:TCP 使用滑動窗口機制來進行流量控制杭棵。接收方可以通知發(fā)送方其可接收的數(shù)據(jù)量,以避免發(fā)送過多數(shù)據(jù)導致網(wǎng)絡擁塞或接收方緩沖區(qū)溢出氛赐。

擁塞控制:TCP 通過擁塞窗口和擁塞避免算法來處理網(wǎng)絡擁塞魂爪。當網(wǎng)絡出現(xiàn)擁塞時,TCP 會降低發(fā)送速率以減輕網(wǎng)絡負載艰管,并且在逐漸增加發(fā)送速率時監(jiān)測網(wǎng)絡的擁塞情況滓侍。

面向字節(jié)流:TCP 是一種面向字節(jié)流的協(xié)議,它將數(shù)據(jù)視為連續(xù)的字節(jié)流牲芋,而不是分割成消息或數(shù)據(jù)包撩笆。因此,應用層協(xié)議需要定義消息的邊界缸浦。

全雙工通信:TCP 連接是全雙工的夕冲,意味著客戶端和服務器可以同時發(fā)送和接收數(shù)據(jù),實現(xiàn)雙向通信裂逐。

TCP 協(xié)議在許多網(wǎng)絡應用中廣泛使用歹鱼,包括網(wǎng)頁瀏覽、電子郵件卜高、文件傳輸?shù)让忠觥K峁┝丝煽康臄?shù)據(jù)傳輸和連接管理,適用于需要確保數(shù)據(jù)完整性和可靠性的場景掺涛。

2UDP協(xié)議:類似舔狗 單相思 不懼可靠性只管發(fā)出不管對方是否接收 (啟動時要先開啟服務端在開啟客戶端)

服務端(Server)


package org.example;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.ServerSocket;

import java.net.Socket;

public class Server {

public static void main(String[]args) {

try {

ServerSocket serverSocket =new ServerSocket(8888);

System.out.println("服務端已啟動庭敦,等待客戶端連接...");

Socket socket =serverSocket.accept();

System.out.println("客戶端已連接");

BufferedReader br =new BufferedReader(new InputStreamReader(socket.getInputStream()));

BufferedWriter bw =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

BufferedReader consoleReader =new BufferedReader(new InputStreamReader(System.in));

new Thread(() -> {

String input;

try {

while ((input =br.readLine()) !=null) {

System.out.println("客戶端:" +input);

}

}catch (Exception e) {

e.printStackTrace();

}

}).start();

String output;

while (true) {

System.out.print("服務端:");

output =consoleReader.readLine();

bw.write(output);

bw.newLine();

bw.flush();

}

}catch (Exception e) {

e.printStackTrace();

}

}

}

客戶端(Client)


package org.example;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.Socket;

public class Client {

public static void main(String[]args) {

try {

Socket socket =new Socket("localhost",8888);

BufferedReader br =new BufferedReader(new InputStreamReader(socket.getInputStream()));

BufferedWriter bw =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

BufferedReader consoleReader =new BufferedReader(new InputStreamReader(System.in));

new Thread(() -> {

String input;

try {

while ((input =br.readLine()) !=null) {

System.out.println("服務端:" +input);

}

}catch (Exception e) {

e.printStackTrace();

}

}).start();

String output;

while (true) {

System.out.print("客戶端:");

output =consoleReader.readLine();

bw.write(output);

bw.newLine();

bw.flush();

}

}catch (Exception e) {

e.printStackTrace();

}

}

}

UDP(用戶數(shù)據(jù)報協(xié)議)是一種無連接的、不可靠的薪缆、面向數(shù)據(jù)報的傳輸層協(xié)議秧廉。與TCP相比,UDP更加簡單矮燎,因為它不提供連接狀態(tài)跟蹤定血、流量控制和擁塞控制等功能。UDP協(xié)議的特點包括:

無連接性:UDP是一種無連接的協(xié)議诞外,也就是說在數(shù)據(jù)傳輸前不需要建立連接澜沟。每個數(shù)據(jù)包都是獨立的,相互之間沒有關聯(lián)峡谊。

不可靠性:UDP不保證數(shù)據(jù)傳輸?shù)目煽啃悦K洹K惶峁┲貍鳈C制刊苍,如果數(shù)據(jù)包在傳輸過程中丟失、損壞或順序錯亂濒析,UDP不會自動進行重傳或糾正錯誤正什。

面向數(shù)據(jù)報:UDP是一種面向數(shù)據(jù)報的協(xié)議,意味著數(shù)據(jù)以數(shù)據(jù)包的形式進行傳輸号杏。每個數(shù)據(jù)包都有固定的大小限制婴氮,超出限制的數(shù)據(jù)將被分割或丟棄。

低延遲:由于UDP不需要建立連接和維護連接狀態(tài)盾致,因此具有較低的延遲主经。這使得UDP適用于實時應用,如音頻和視頻流傳輸庭惜。

適用于廣播和多播:UDP支持廣播和多播傳輸罩驻,可以將數(shù)據(jù)包同時發(fā)送給多個接收方。

簡單輕量:UDP的實現(xiàn)相對簡單护赊,開銷較小惠遏。它不像TCP那樣復雜,不需要維護連接狀態(tài)和緩沖區(qū)骏啰,因此在某些情況下更適合要求輕量級通信的應用节吮。

UDP常用于不需要可靠性保證的應用,如DNS查詢器一、NTP時間同步课锌、實時音視頻傳輸?shù)取T谶@些應用中祈秕,傳輸速度和實時性更為重要,而數(shù)據(jù)的丟失或錯誤可以通過應用層協(xié)議來處理

3HTTP協(xié)議:
HTTP(超文本傳輸協(xié)議)是一種用于傳輸超文本(如HTML)數(shù)據(jù)的應用層協(xié)議雏胃。它是互聯(lián)網(wǎng)上應用最廣泛的協(xié)議之一请毛,用于在客戶端和服務器之間傳輸和交換數(shù)據(jù)。以下是HTTP協(xié)議的一些關鍵特點:

無連接:HTTP是一種無連接的協(xié)議瞭亮,每個請求-響應交換都是獨立的方仿,服務器不會保存客戶端的連接狀態(tài)。這意味著每個請求都是一個獨立的事務统翩,服務器處理完請求后即斷開連接仙蚜。

無狀態(tài):HTTP是一種無狀態(tài)的協(xié)議,即服務器不會保存客戶端的狀態(tài)信息厂汗。每個請求都是相互獨立的委粉,服務器不會記住之前的請求或會話狀態(tài)。為了維護狀態(tài)娶桦,通常需要使用會話機制贾节,如cookie或session汁汗。

基于請求-響應模型:HTTP通信采用請求-響應模型±跬浚客戶端發(fā)送HTTP請求到服務器知牌,服務器處理請求并返回HTTP響應給客戶端。請求和響應包含了一些元數(shù)據(jù)(如頭部信息)和可選的數(shù)據(jù)主體斤程。

支持多種請求方法:HTTP定義了多種請求方法角寸,包括GET、POST忿墅、PUT扁藕、DELETE等。每種方法有不同的語義球匕,用于執(zhí)行不同的操作纹磺,如獲取資源、提交數(shù)據(jù)亮曹、更新資源等橄杨。

基于文本協(xié)議:HTTP使用文本格式進行通信,請求和響應都是由ASCII文本組成的照卦。這使得HTTP消息易于閱讀式矫、調試和理解,但也增加了通信的開銷役耕。

無加密:HTTP本身不提供數(shù)據(jù)加密功能采转,傳輸?shù)臄?shù)據(jù)是明文的。為了安全傳輸敏感信息瞬痘,可以使用HTTPS(HTTP Secure)故慈,它在HTTP上加入了SSL/TLS加密層。

HTTP被廣泛用于Web瀏覽器和Web服務器之間的通信框全,用于獲取網(wǎng)頁察绷、圖像、視頻等資源津辩。除了Web瀏覽器拆撼,許多其他應用程序和服務也使用HTTP進行通信,如API接口喘沿、移動應用程序闸度、IoT設備等。

最后感謝你們能看完此文章,同時也希望你們能在學習和戀愛方面要像tcp一樣穩(wěn)固的砥礪前行不要想udp一樣當舔狗去等那些不值得的人和事 (遇到事不能著急不管是感情還是學習都一樣 要著急必毀 要是我的早晚是我的 要不是我的在著急也不屬于我 良木先伐,寶馬先死,木秀于林風必摧之 本人是這么覺得的)##

要勵夫驥驁之氣蚜印,鴻鵠之志莺禁,有諭乎人心者,誠也晒哄。

記住良木先伐,寶馬先死,木秀于林風必摧之

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末睁宰,一起剝皮案震驚了整個濱河市肪获,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌柒傻,老刑警劉巖孝赫,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異红符,居然都是意外死亡青柄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門预侯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來致开,“玉大人,你說我怎么就攤上這事萎馅∷粒” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵糜芳,是天一觀的道長飒货。 經(jīng)常有香客問我,道長峭竣,這世上最難降的妖魔是什么塘辅? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮皆撩,結果婚禮上扣墩,老公的妹妹穿的比我還像新娘。我一直安慰自己扛吞,他們只是感情好呻惕,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著滥比,像睡著了一般蟆融。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上巷懈,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天液南,我揣著相機與錄音,去河邊找鬼。 笑死昌粤,一個胖子當著我的面吹牛,可吹牛的內容都是我干的橄碾。 我是一名探鬼主播狡逢,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼棚亩!你這毒婦竟也來了蓖议?” 一聲冷哼從身側響起虏杰,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勒虾,沒想到半個月后纺阔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡修然,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年笛钝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愕宋。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡玻靡,死狀恐怖,靈堂內的尸體忽然破棺而出中贝,到底是詐尸還是另有隱情囤捻,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布邻寿,位于F島的核電站蝎土,受9級特大地震影響,放射性物質發(fā)生泄漏老厌。R本人自食惡果不足惜瘟则,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望枝秤。 院中可真熱鬧醋拧,春花似錦、人聲如沸淀弹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽薇溃。三九已至菌赖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沐序,已是汗流浹背琉用。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留策幼,地道東北人邑时。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像特姐,于是被迫代替她去往敵國和親晶丘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內容