最近因為需要用到網路程式設計的知識點,看了這篇部落格,感覺非常有用,對tcp/udp描述的很通熟易懂:
基於tcp協議的socket通訊類似於b/s架構,面向連線,但不同的是伺服器端可以向客戶端主動推送訊息。
使用tcp協議通訊需要具備以下幾個條件:
(1).建立乙個套接字(socket)
(2).繫結伺服器端ip位址及埠號(伺服器端)
(3).利用listen()方法開啟監聽(伺服器端)
(4).利用accept()方法嘗試與客戶端建立乙個連線(伺服器端)
(5).利用connect()方法與伺服器建立連線(客戶端)
(6).利用send()方法向建立連線的主機傳送訊息
(7).利用receive()方法接受來自建立連線的主機的訊息(可靠連線)
tcp通訊過程如下圖:
基於udp協議是無連線模式通訊,占用資源少,響應速度快,延時低。至於可靠性,可通過應用層的控制來滿足。(不可靠連線)
(1).建立乙個套接字(socket)
(2).繫結伺服器端ip位址及埠號–伺服器端
(3).通過sendto()方法向指定主機傳送訊息(需提供主機ip位址及埠)
(4).通過recivefrom()方法接收指定主機傳送的訊息(需提供主機ip位址及埠)
udp通訊過程如下圖:
tcp協議和udp協議連線過程的區別如下:
1.基於連線與無連線;
2.對系統資源的要求(tcp較多,udp少);
3.udp程式結構較簡單;
4.tcp資料傳輸採用流模式與udp則採用資料報模式 ;
5.tcp保證資料正確性,udp可能丟包,tcp保證資料順序,udp不保證。
該示例僅只進行了一次通訊
伺服器端:
using system;
using system.net;
using system.net.sockets;
using system.text;
namespace socket程式設計
); endpoint endpoint = new ipendpoint(ipaddress,7788);//ipendpoint是對ip + 埠的封裝
tcpserver.bind(endpoint);
//3.開始監聽,等待客戶端連線
tcpserver.listen(100);//引數是最大的連線數
console.writeline("開始監聽...");
//4.使用返回的socket與客戶端通訊
//暫停當前執行緒,直到有乙個客戶端連線過來,之後執行下面的**
socket clientsocket = tcpserver.accept();
console.writeline("客戶端請求連線...");
string message = "hello 歡迎您!";
byte data = encoding.utf8.getbytes(message);
clientsocket.send(data);
console.writeline("向客戶端傳送訊息...");
byte data2 = new byte[1024]; //建立乙個位元組陣列來當作容器,去接收客戶端傳送過來的資料
int length = clientsocket.receive(data2);
string message2 = encoding.utf8.getstring(data2, 0, length);
console.writeline("接收從客戶端發來的訊息..." + message2);
console.readkey();}}
}
客戶端:
using system;
using system.net;
using system.net.sockets;
using system.text;
namespace socket_tcp_客戶端}}
伺服器端:
using system;
using system.net;
using system.net.sockets;
using system.text;
using system.threading;
namespace socket程式設計_udp
static void receivemessage()}}
}
客戶端:
using system;
using system.net;
using system.net.sockets;
using system.text;
namespace socket_udp_客戶端
udpsocket.close();
console.readkey();}}
}
相比之下,
tcp的優點: 可靠,穩定 tcp的可靠體現在tcp在傳遞資料之前,會有三次握手來建立連線,而且在資料傳遞時,有確認、視窗、重傳、擁塞控制機制,在資料傳完後,還會斷開連線用來節約系統資源。
tcp的缺點: 慢,效率低,占用系統資源高,易被攻擊 tcp在傳遞資料之前,要先建連線,這會消耗時間,而且在資料傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每台裝置上維護所有的傳輸連線,事實上,每個連線都會占用系統的cpu、記憶體等硬體資源。 而且,因為tcp有確認機制、三次握手機制,這些也導致tcp容易被人利用,實現dos、ddos、cc等攻擊。
udp的優點: 快,比tcp稍安全 udp沒有tcp的握手、確認、視窗、重傳、擁塞控制等機制,udp是乙個無狀態的傳輸協議,所以它在傳遞資料時非常快。沒有tcp的這些機制,udp較tcp被攻擊者利用的漏洞就要少一些。但udp也是無法避免攻擊的,比如:udp flood攻擊……
udp的缺點: 不可靠,不穩定 因為udp沒有tcp那些可靠的機制,在資料傳遞時,如果網路質量不好,就會很容易丟包。 基於上面的優缺點。
小結tcp與udp的區別:
1.基於連線與無連線;
2.對系統資源的要求(tcp較多,udp少);
3.udp程式結構較簡單;
4.流模式與資料報模式 ;
5.tcp保證資料正確性,udp可能丟包,tcp保證資料順序,udp不保證。
tcp協議和udp協議的差別
tcp udp
是否連線 面向連線 面向非連線
傳輸可靠性 可靠 不可靠
應用場合 傳輸大量資料 少量資料
速度 慢 快
tcp與udp區別總結:
1、tcp面向連線(如打**要先撥號建立連線);udp是無連線的,即傳送資料之前不需要建立連線
2、tcp提供可靠的服務。也就是說,通過tcp連線傳送的資料,無差錯,不丟失,不重複,且按序到達;udp盡最大努力交付,即不保證可靠交付
3、tcp面向位元組流,實際上是tcp把資料看成一連串無結構的位元組流;udp是面向報文的
4、每一條tcp連線只能是點到點的;udp支援一對一,一對多,多對一和多對多的互動通訊
5、tcp首部開銷20位元組;udp的首部開銷小,只有8個位元組
6、tcp的邏輯通訊通道是全雙工的可靠通道,udp則是不可靠通道 C 網路程式設計之TCP UDP
網路位元組順序 tcp ip 採用16 32 位高位先存格式 tcp ip 網路應用中,通訊的兩個程序主要採用 c s模式。伺服器要先啟動,並根據請求提供相應的服務 1 開啟乙個通訊通道訂告知本地主機,它願意在某一位址和埠上接受客戶請求 2 等待客戶請求到達該埠 3 接受到重複服務請求,處理該請求並...
unix網路程式設計之一TCP UDP
網路通訊中最常用的就是tcp udp。2種協議個有一些特點如下 udp是一種簡單的傳輸協議。應用程式寫資料到udp套介面。然後由它封裝成ipv4或ipv6的資料報,再傳送到目的位址。它不提供可靠性。它與伺服器不存在長期的連線關係。tcp是一種面向連線的協議。提供 可靠性 先連線,再傳輸資料。傳送資料...
java學習路程之網路程式設計 TCP UDP
public class demo01 1.tcp協議 tcp協議是面向連線的通訊協議,即在傳輸資料前先在傳送端和接收端建立邏輯連線,然後再傳輸資料,它提供了兩台計算機之間可靠無差錯的資料傳輸。在tcp連線中必須要明確客戶端與伺服器端,由客戶端向服務端發出連線請求,每次連線的建立都需要經過 三次握手...