Python語言提供了Socket套接字來實作網路通信, Python的應用程式通常通過Socket"套接字"向網路發出請求或者應答網路請求,使主機間或者一臺計算機上的行程間可以通訊,
- TCP/UDP協議
TCP協議:
- TCP協議是在通信的兩臺設備之間建立連接通道,對傳輸的資料大小沒有限制,但是因為建立了連接,相對可靠一些,但是速度會慢一些,TCP協議又稱為三次握手–四次揮手協議,因為建立程序有三步(發送請求、獲取反饋、建立連接),通常情況下,我們的藍牙通信、打電話都是使用的 TCP 協議,
UPD協議:
- UDP協議需要將資料打包,因為包有大小,所以對資料大小是有限制的,UDP是不用建立連接的,但不保證待接收方一定會接收到訊息,所以不可靠,但是,因為不用建立連接,因此速度要快一些,通常情況下,我們發送短信都是使用的UDP 協議,
- 服務器端與客戶端
服務器端:
創建socket物件
使用bind()系結主機號host和埠號port
使用listen()監聽
使用accept()被動連接
使用send()/rece() 發送/接收資料
客戶端:
創建socket物件
使用connect連接到服務器端
使用send()/recv() 發送/接收資料
關閉socket物件
**
服務器----->源代碼
**
# -*- codeing = UTF-8 -*-
# @Time : 16:02
# @Author : WK-良人
# @File : Server服務器.py
# @Software : PyCharm
# 使用python中的網路編程
import socket
import time
# 創建一個tcp/ip協議的套接字
tcpSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 創建一個udp/ip的套接字
# udpSocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#IP/埠號
host = "localhost"
port = 8888
Address = (host,port)
# 開始系結地址
tcpSocket.bind(Address)
tcpSocket.listen(5)
while True:
print("-"*15,"服務器等待被連接","-"*15)
client_sock,client_add = tcpSocket.accept()
print("已連接到客戶端,地址為:{0}".format(client_add))
try:
print("*"*20,"正在等待接收資料ing","*"*20)
while True:
#接收客戶端向服務器發送的資料
Client_databack = client_sock.recv(1024)
print("接收到的客戶端發送資料內容為:{0}".format(str(Client_databack,encoding="UTF-8")))
if Client_databack.upper() == "EXIT":
break
# # 獲取電腦當前時間,帶日期的24小時格式 %I:12小時制 %H:24小時制
Now_time = time.strftime("%Y/%m/%d %H:%M:%S",time.localtime())
# 服務器向客戶端的回應資料
#client_sock.send(bytes(data.encode("UTF-8")))
client_sock.send(bytes("時間 = {0},資料 = {1}".format(Now_time, str(Client_databack, encoding="UTF-8")), encoding="UTF-8"))
Server_data = input("My[服務器]=====>請輸入發送到客戶端的訊息 :")
client_sock.send(Server_data.encode("UTF-8"))
#接收客戶端向服務器發送的資料
Server_databack = client_sock.recv(1024).decode("UTF-8")
print("接收到的客戶端發送資料內容為:%s" % Server_databack)
except Exception as abc:
print(abc)
finally:
client_sock.close()
客戶端----->源代碼
# -*- codeing = UTF-8 -*-
# @Time : 16:02
# @Author : WK-良人
# @File : Client客戶端.py
# @Software : PyCharm
# 使用python中的網路編程
import socket
import time
# 創建一個tcp/ip協議的套接字
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 創建一個udp/ip的套接字
# udpSocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#IP/埠號
host = "localhost
port = 8888
Address = (host, port)
# 開始連接服務器地址
clientSocket.connect(Address)
if clientSocket is None:
print("Sorry,無法未連接到服務器.....NO")
else:
print("Successful,已經連接到服務器-----OK")
while True:
Client_data = input("My[客戶端]=====>請輸入發送到服務器的訊息(exit/quit退出) :")
#time.sleep(0.5)
if Client_data.lower() =="exit" or Client_data.lower() =="quit":
#bytes 位元組串
clientSocket.send(bytes("EXIT".encode("UTF-8")))
#關閉當前客戶端
print("我斷開連接了...")
clientSocket.close()
break
clientSocket.send(bytes(Client_data.encode("UTF-8")))
#接收服務器向客戶端發送的資料
Client_data_finally = clientSocket.recv(1024).decode("UTF-8")
print("【系統反饋】已收到資料內容為:%s"%Client_data_finally)
#print("收到的客戶端資料內容為:{0}".format(str(data_finally)))
效果展示:


這兩份源代碼就可以進行簡單的通訊,如有問題,請聯系本人!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/327926.html
標籤:其他
上一篇:我可以在地圖功能中設定狀態嗎?
