一戚揭、TCP(傳輸控制協(xié)議)和 UDP(用戶數(shù)據(jù)報協(xié)議)是網(wǎng)絡(luò)體系結(jié)構(gòu) TCP/IP 模 型中傳輸層一層中的兩個不同的通信協(xié)議振峻。
TCP:傳輸控制協(xié)議藻雪,一種面向連接的協(xié)議饲宿,給用戶進(jìn)程提供可靠的全雙工 的字節(jié)流,TCP 套接口是字節(jié)流套接口(stream socket)的一種迈勋。
UDP:用戶數(shù)據(jù)報協(xié)議炬灭。UDP 是一種無連接協(xié)議。UDP 套接口是數(shù)據(jù)報套 接口(datagram socket)的一種粪躬。
二、TCP 和 UDP 介紹
1)基本 TCP 客戶—服務(wù)器程序設(shè)計基本框架
說明:(三路握手)
1.客戶端發(fā)送一個 SYN 段(同步序號)指明客戶打算連接的服務(wù)器端口昔穴,以 及初始化序號(ISN) 镰官。
2.服務(wù)器發(fā)回包含服務(wù)器的初始序號的 SYN 報文段作為應(yīng)答。同時吗货,將確 認(rèn)序號(ACK)設(shè)置為客戶的 ISN 加 1 以對客戶的 SYN 報文段進(jìn)行確認(rèn)泳唠。一個 SYN 將占用一個序號。
3.客戶必須將確認(rèn)序號設(shè)置為服務(wù)器的 ISN 加 1 以對服務(wù)器的 SYN 報文段 進(jìn)行確認(rèn)宙搬。
基本 TCP 客戶—服務(wù)器程序設(shè)計基本框架流程圖
UDP 和 TCP 的對比: UDP 沒有三次握手過程笨腥。
簡單點說。UDP 處理的細(xì)節(jié)比 TCP 少勇垛。UDP 不能保證消息被傳送到(它也 報告消息沒有傳送到)目的地脖母。UDP 也不保證數(shù)據(jù)包的傳送順序。UDP 把數(shù)據(jù) 發(fā)出去后只能希望它能夠抵達(dá)目的地闲孤。
TCP 優(yōu)缺點:
優(yōu)點:
1.TCP 提供以認(rèn)可的方式顯式地創(chuàng)建和終止連接谆级。
2.TCP 保證可靠的、順序的(數(shù)據(jù)包以發(fā)送的順序接收)以及不會重復(fù)的 數(shù)據(jù)傳輸讼积。
3.TCP 處理流控制肥照。
4.允許數(shù)據(jù)優(yōu)先
5.如果數(shù)據(jù)沒有傳送到,則 TCP 套接口返回一個出錯狀態(tài)條件勤众。
6.TCP 通過保持連續(xù)并將數(shù)據(jù)塊分成更小的分片來處理大數(shù)據(jù)塊舆绎。—無需 程序員知道
缺點: TCP 在轉(zhuǎn)移數(shù)據(jù)時必須創(chuàng)建(并保持)一個連接们颜。這個連接給通信 進(jìn)程增加了開銷吕朵,讓它比 UDP 速度要慢猎醇。
UDP 優(yōu)缺點:
1.UDP 不要求保持一個連接
2.UDP 沒有因接收方認(rèn)可收到數(shù)據(jù)包(或者當(dāng)數(shù)據(jù)包沒有正確抵達(dá)而自動 重傳)而帶來的開銷。
3.設(shè)計 UDP 的目的是用于短應(yīng)用和控制消息
4.在一個數(shù)據(jù)包連接一個數(shù)據(jù)包的基礎(chǔ)上边锁,UDP 要求的網(wǎng)絡(luò)帶寬比 TCP 更 小姑食。
三、Socket 編程
Socket 接口是 TCP/IP 網(wǎng)絡(luò)的 API茅坛,Socket 接口定義了許多函數(shù)或例程音半,程 序員可以用它們來開發(fā) TCP/IP 網(wǎng)絡(luò)上的應(yīng)用程序。要學(xué) Internet 上的 TCP/IP 網(wǎng) 絡(luò)編程贡蓖,必須理解 Socket 接口曹鸠。
Socket 接口設(shè)計者最先是將接口放在 Unix 操作系統(tǒng)里面的。如果了解 Unix 系統(tǒng)的輸入和輸出的話斥铺,就很容易了解 Socket 了彻桃。網(wǎng)絡(luò)的 Socket 數(shù)據(jù)傳輸是一 種特殊的 I/O,Socket 也是一種文件描述符晾蜘。Socket 也具有一個類似于打開文件 的函數(shù)調(diào)用 Socket()邻眷,該函數(shù)返回一個整型的 Socket 描述符,隨后的連接建立剔交、 數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^該 Socket 實現(xiàn)的肆饶。常用的 Socket 類型有兩種:流式 Socket(SOCK_STREAM)和數(shù)據(jù)報式 Socket(SOCK_DGRAM)。流式是一種 面向連接的 Socket岖常,針對于面向連接的 TCP 服務(wù)應(yīng)用驯镊;數(shù)據(jù)報式 Socket 是一種 無連接的 Socket,對應(yīng)于無連接的 UDP 服務(wù)應(yīng)用竭鞍。
四板惑、FTP
文件傳輸協(xié)議(File Transfer Protocol,F(xiàn)TP)是用于在網(wǎng)絡(luò)上進(jìn)行文件傳輸?shù)囊惶讟?biāo)準(zhǔn)協(xié)議偎快,它工作在 OSI 模型的第七層冯乘, TCP 模型的第四層, 即應(yīng)用層晒夹, 使用 TCP 傳輸而不是 UDP往湿, 客戶在和服務(wù)器建立連接前要經(jīng)過一個“三次握手”的過程, 保證客戶與服務(wù)器之間的連接是可靠的惋戏, 而且是面向連接领追, 為數(shù)據(jù)傳輸提供可靠保證。
FTP允許用戶以文件操作的方式(如文件的增响逢、刪绒窑、改、查舔亭、傳送等)與另一主機(jī)相互通信些膨。然而蟀俊, 用戶并不真正登錄到自己想要存取的計算機(jī)上面而成為完全用戶, 可用FTP程序訪問遠(yuǎn)程資源订雾, 實現(xiàn)用戶往返傳輸文件肢预、目錄管理以及訪問電子郵件等等, 即使雙方計算機(jī)可能配有不同的操作系統(tǒng)和文件存儲方式洼哎。
參考思路:
- 客戶端向服務(wù)端發(fā)起socket連接烫映,建立數(shù)據(jù)傳輸通道
- 客戶端向服務(wù)端發(fā)送要傳輸?shù)奈募Q,以’#’字符結(jié)尾噩峦,服務(wù)端逐字符接受锭沟,知道接收到‘#’
- 客戶端向服務(wù)端發(fā)送文件長度,4字節(jié)
- 客戶端向服務(wù)端發(fā)送文件內(nèi)容
- 服務(wù)端接受完文件之后识补,發(fā)送“OK”
- 客戶端接收到“OK”族淮,關(guān)閉套接字
1、客戶端向服務(wù)端發(fā)起socket連接凭涂,建立數(shù)據(jù)傳輸通道
2祝辣、文件的類型不限于文本文件,所以在處理的時候應(yīng)該以二進(jìn)制文件的形式進(jìn)行處理切油、C++的文件流中提供了read()和write()函數(shù)蝙斜,可以比較方便的實現(xiàn)二進(jìn)制數(shù)據(jù)一次按一定大小讀取和寫入。
3白翻、- 緩沖區(qū)大小是有限的乍炉,而且在傳輸大文件的時候绢片,非常有可能出現(xiàn)緩沖區(qū)大小小于文件長度滤馍,所以在處理的時候要循環(huán)處理,發(fā)送要循環(huán)發(fā)送底循,接受也應(yīng)該循環(huán)接受巢株、寫入。 C++的文件流中提供了read()和write()函數(shù)熙涤,不斷調(diào)用這兩個函數(shù)來進(jìn)行超過緩沖區(qū)大小的傳輸數(shù)據(jù)阁苞。
4、在傳輸文件內(nèi)容的時候祠挫,主要是根據(jù)前面收到的文件長度之后那槽,調(diào)用定長數(shù)據(jù)接受函數(shù)來進(jìn)行數(shù)據(jù)接收。
5等舔、在傳輸結(jié)束之后骚灸,服務(wù)端打印文件傳輸結(jié)束的提示,并且給客戶端進(jìn)行信息返回慌植∩跎客戶端在接受OK信息之后义郑,退出。
6丈钙、如何判斷文件接收完畢非驮,就是收到FIN包時。FIN 包表示數(shù)據(jù)傳輸完畢雏赦,計算機(jī)收到 FIN 包后就知道對方不會再向自己傳輸數(shù)據(jù)劫笙。