天天看點

網絡程式設計(2)UDP協定、TCP協定、socket概念、socket-udp網絡通信、socket-tcp網絡通信

UDP協定

UDP:使用者資料報協定,不可靠性,隻是把應用程式傳給IP層資料報送出去,但是不能保證他們是否能到達目的地,傳輸資料報錢不用再用戶端和伺服器之間建立連接配接,并且沒有逾時重發機制,是以傳輸速度快。

UDP特點

安全性差不穩定,沒有順序, 大小限制64KB内 -速度快

TCP協定

tcp通信,在通訊之前,一定要先建立相關連結,才能發送資料

TCP的三次握手

網絡程式設計(2)UDP協定、TCP協定、socket概念、socket-udp網絡通信、socket-tcp網絡通信
第一次握手:主機A發送位碼為syn=1,随機産生seq number=1234567的資料包到伺服器,主機B由SYN=1知道,A要求建立聯機;

第二次握手:主機B收到請求後要确認聯機資訊,向A發送ack number=(主機A的seq+1),syn=1,ack=1,随機産生seq=7654321的包

第三次握手:主機A收到後檢查ack number是否正确,即第一次發送的seq number+1,以及位碼ack是否為1,若正确,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到後确認seq值與ack=1則連接配接建立成功。

完成三次握手,主機A與主機B開始傳送資料。
           

标志控制

ACK:确認标志
SYN:同步标志
FIN:結束标志
           

TCP特點

  • 安全性高,穩定性好,有序
  • 速度相對較慢

什麼是傳說中的socket?

socket(簡稱 套接字)是一個網絡通信的端點,它能實作不同主機間的程序通信,我們網絡上各種各樣大多數都是基于Socket來完成的通訊!這裡有一個概念我們需要提前知道!即發送通訊請求的一方為概念上的Client(客戶)端,接受通訊請求的一方為概念上的Server(服務)端。(Server端裡的通信端口需要提前設定好)

網絡中程序之間通訊的套路

這裡首要解決的問題是如何确定你要和對方電腦上哪個程序進行通訊!

是以我們需要利用協定(TCP或者UDP),IP位址,端口辨別網絡的程序,然後通着這些辨別進行通訊!

socket-UDP網絡通信

下圖為使用socket建立UDP通信的過程

網絡程式設計(2)UDP協定、TCP協定、socket概念、socket-udp網絡通信、socket-tcp網絡通信

下面為使用socket建立UDP通信的代碼(以python代碼為例,使用python中的socket子產品)

服務端(Sever)

1.建立套接字對象
2.綁定端口
3.接收消息
4.回複消息
5.關閉套接字對象

import socket

# 1.建立套接字對象
udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)    #參數:(IPv4協定,傳輸層使用UDP協定)

# 2.綁定端口
udp_socket.bind(('',7852))

# 3.接收消息
data,addr=udp_socket.recvfrom(1024)   #1024為接受消息的大小,傳回值類型為元組,可分包分别存入不同變量中
print('>>:'+(data.decode('utf-8')))

# 4.傳回消息
udp_socket.sendto(senInput.encode('utf-8'),addr)

# 5.關閉套接字對象
udp_socket.close()
           

用戶端(Client)

1.建立套接字對象
2.發送資料
3.接收資料
4.關閉套接字對象

import socket
# 1.建立套接字對象
udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

# 2.發送消息
data = "你吃了嗎"
udp_socket.sendto(data.encode('utf-8'),('192.168.194.1',7852))

# 3.接收伺服器傳回的消息
data,addr=udp_socket.recvfrom(1024)
print(data.decode('utf-8'))

# 4.關閉套接字對象
udp_socket.close()
           

socket-TCP網絡通信

下圖為使用socket建立TCP通信的過程

網絡程式設計(2)UDP協定、TCP協定、socket概念、socket-udp網絡通信、socket-tcp網絡通信

下面為使用socket建立TCP通信的代碼(以python代碼為例,同樣使用python中的socket子產品)

服務端(Sever)

1.建立套接字對象
2.綁定ip位址和端口
3.監聽建立的套接字(socket)對象
4.接收
5.關閉套接字對象

import socket

# 1.建立套接字對象
tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #參數:(IPv4協定,傳輸層使用TCP協定)

# 2.bind()綁定
tcp_socket.bind(('',7852))

# 3.listen()監聽
tcp_socket.listen()

# 4.accept()接受資料
s,addr=tcp_socket.accept()
data=s.recv(1024)
print(data.decode('utf-8'))

# 5.關閉套接字對象
s.close()
tcp_socket.close()
           

用戶端(Client)

1.建立套接字對象
2.connect()連接配接
3.發送
4.關閉套接字對象

import socket

# 1.建立套接字對象
tcp_cocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 2.建立連接配接
tcp_cocket.connect(('192.168.194.1',7852))  

# 3.發送資料
tcp_cocket.send('吃了嗎'.encode('utf-8'))

# 4.關閉套接字對象
tcp_cocket.close()