1. 程式人生 > >python網絡編程基礎--socket的簡介,以及使用socket來搭建一個簡單的udp小程序

python網絡編程基礎--socket的簡介,以及使用socket來搭建一個簡單的udp小程序

流程 發送消息 lose 1.10 軟件 搬運 我們 arm 進程間

socket介紹:

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()

python網絡編程基礎--socket的簡介,以及使用socket來搭建一個簡單的udp小程序