您好,登錄后才能下訂單哦!
socket(簡稱套接字),是進程間通訊的一個工具,他能實現把數據從一方傳輸到另一方,完成不同電腦上進程之間的通訊,它好比數據的搬運工。
socket應用:
不夸張來說,只要跟網絡相關的應用程序或者軟件都使用到了socket, 比如:微信,qq等
使用socket創建udp網絡程序的流程:
1,創建客戶端套接字
2,發送/接收數據
3,關閉套接字
使用程序展現流程 :(使用的 ide為pycharm):
1,首先創建socket,在 Python 中 使用socket 模塊的函數 socket 就可以完成:
import socket
2,創建udp socket套接字
創建套接字格式 :udp_socket = socket(AddressFamily, Type)
其中AddressFamily代表IP地址類型,AF_INET表示ipv4類型、AF_INET6表示ipv6類型; Type:套接字類型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 協議)或者 SOCK_DGRAM(數據報套接字,主要用于 UDP 協議)
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
3,發送/接收套接字(接上方的步驟)
首先準備對方的 ip地址和 端口號
假設ip地址為:192.168.1.103
端口號為:8080
dest_addr = ('192.168.1.103',8080) #注意 是元組 ip地址為字符串,端口號為數字
從鍵盤獲取數據
send_data = input('請輸入要輸入的數據 ')
發送數據到指定的電腦上
udp_socket = socket.sendto(send_data.encode('utf-8'),dest_addr)
#sendto是udp用來發送數據的,在發送的過程中我們需要對發送的數據進行轉碼,轉換成utf-8
4,關閉套接字
udp_socket.close()
以上便是udp使用socket傳輸的一些基本步驟
整個發送/接受數據的小程序完整如下:
import socket
# 1. 創建udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2. 準備接收方的地址
dest_addr = ('192.168.236.129', 8080)
# 3. 從鍵盤獲取數據
send_data = input("請輸入要發送的數據:")
# 4. 發送數據到指定的電腦上
udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
# 5. 等待接收對方發送的數據
recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字節數
# 6. 顯示對方發送的數據
# 接收到的數據recv_data是一個元組
# 第1個元素是對方發送的數據
# 第2個元素是對方的ip和端口
print(recv_data[0].decode('gbk'))
print(recv_data[1])
# 7. 關閉套接字
udp_socket.close()
數據的編碼和解碼(簡單兩行):
str->bytes:encode編碼
bytes->str:decode解碼
udp綁定端口:
用上方的小程序發送信息,我們每次發送的數據,端口好都是會改變的,所以需要我們對端口進行綁定
綁定示例:
from socket import *
# 1. 創建套接字
udp_socket = socket(AF_INET, SOCK_DGRAM)
# 2. 綁定本地的相關信息,如果一個網絡程序不綁定,則系統會隨機分配
local_addr = ('', 7788) # ip地址和端口號,ip一般不用寫,表示本機的任何一個ip
udp_socket.bind(local_addr)
# 3. 等待接收對方發送的數據
recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字節數
# 4. 顯示接收到的數據
print(recv_data[0].decode('gbk'))
# 5. 關閉套接字
udp_socket.close()
udp小程序的實戰(面向對象開發):簡單的聊天室(一起使用python的基礎知識和上訪的udp來實戰吧^_^)
import socket
#這個是發送信息的函數
def send_msg(udp_socket):
"""獲取鍵盤數據,并將其發送給對方"""
# 1. 從鍵盤輸入數據
msg = input("\n請輸入要發送的數據:")
# 2. 輸入對方的ip地址
dest_ip = input("\n請輸入對方的ip地址:")
# 3. 輸入對方的port
dest_port = int(input("\n請輸入對方的port:"))
# 4. 發送數據
udp_socket.sendto(msg.encode("utf-8"), (dest_ip, dest_port))
#這個是接受數據的函數
def recv_msg(udp_socket):
"""接收數據并顯示"""
# 1. 接收數據
recv_msg = udp_socket.recvfrom(1024)
# 2. 解碼
recv_ip = recv_msg[1]
recv_msg = recv_msg[0].decode("utf-8")
# 3. 顯示接收到的數據
print(">>>%s:%s" % (str(recv_ip), recv_msg))
#主函數
def main():
# 1. 創建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2. 綁定本地信息
udp_socket.bind(("", 7890))
while True:
# 3. 選擇功能
print("="*30)
print("1:發送消息")
print("2:接收消息")
print("="*30)
op_num = input("請輸入要操作的功能序號:")
# 4. 根據選擇調用相應的函數
if op_num == "1":
send_msg(udp_socket)
elif op_num == "2":
recv_msg(udp_socket)
else:
print("輸入有誤,請重新輸入...")
if __name__ == "__main__":
main()
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。