1. 程式人生 > >網路通訊——>TCP協議和UDP協議的客戶端與服務端之間的建立

網路通訊——>TCP協議和UDP協議的客戶端與服務端之間的建立

網路程式設計
OSI有七層模型:它從低到高分別是:物理層、資料鏈路層、網路層、傳輸層、會話層、表示層和應用層。如下圖:
OSI模型    TCP/IP模型

網路程式設計的三要素:
1、IP地址

##  獲取ip地址和主機名的方式
#需要匯入socket模組
import  socket
name = socket.gethostname()
ip = socket.gethostbyname()
print(name,ip)

2、埠號:
0–65526是有效埠,0–1024是系統使用或者保留埠

3、協議:通訊的方式,例如:TCP DUP
TCP的優缺點:需要建立連線、速度慢、但是可靠安全。
UDP的優缺點:不需要建立連線、速度快、不可靠不安全、只管發不管對方是否收到。

下面是TCP協議和UDP協議的客戶端和服務端建立連線
TCP通訊程式碼

#建立TCP協議的客戶端
import socket
#1、建立socket物件,第一個引數ipv4協議,第二個面向流的TCP協議
s = socket.socket(socket.AF_INET,sock.SOCK_STREAM)
# 2、建立連線:ip地址和埠號(連線那臺計算機就寫它的ip和埠號,本機的ip:“127.0.0.1”)
s.connect(('127.0.0.1',8001))
# 3、傳送資料
while True:
		data = input("客戶端發出請求:")
		#向客戶端傳送資料
		s.send(data.encode())

		#  接收客戶端的資料
		data1 = s.recv(1024)
		print(data1.decode('utf-8'))
		#  輸入byebye結束死迴圈
		if  data1 == b'byebye':
				break
s.close()		
###  建立TCP的服務端
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#繫結客戶端的IP地址和埠
s.bind(('127.0.0.1',8848))

#監聽:接收多少個客戶端
s.listen(2)

#接收客戶端的請求
cilent,addres = s.accept()
while True:
    #接收客戶端發來的資料
# 使用cilent客戶端而不是使用s服務端是因為服務端面對很多客戶端,
# 所以不能使用服務端,否則不知道回覆給那個客戶端
    data1 = cilent.recv(1024)
    print(data1.decode('utf-8'))

    #伺服器響應客戶端
    data2= input('伺服器響應:')
    cilent.send(data2.encode('utf-8'))
    if data1 == b'byebye':
        break
s.close()

以上是TCP協議的客戶端和服務端建立連線,可以向qq一樣互發訊息

#UDP客戶端
import socket
#  這點需要注意的是第二個引數與TCP的是不一樣的
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
    data = input('>>>:')
    s.sendto(data.encode(),('10.8.156.43',8000))

    data1,addr1= s.recvfrom(1024)
    print(data1.decode(),addr1)
    if data1 == b'byebye':
        break
s.close()
#UDP協議服務端
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('10.8.156.43',8000))
while True:
    data,addr = s.recvfrom(1024)
    print(data.decode(),addr)

    data1 = input('>>>:')
    s.sendto(data1.encode(),addr)
    if data == b'byebye':
        break
s.close()

UDP建立連線與TCP建立連線相比不需要客戶端發出連線請求,服務端也不需要監聽。