python udp協議發送接收數據

Socket

socket簡稱套接字,是進程間通信的一種方式。與其他的方式的進程間的通訊的方式不同的是,socket是實現了主機間進程間的通訊。我們網絡上的各種服務都是基於socket來完成的。例如QQ.微信。 

怎麼樣創建socket呢。


創建一個tcpsocket: 

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 

創建一個UDP類型的socket;


# # 創建套接字


# udpSocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)


UDP介紹

udp—–數據報文協議,是一個無連接的簡單的面向數據報的運輸層協議,UDP不提供可靠性,他只是將應用程序傳送給IP層的數據報文發送出去,並不保證能否達到目的地。由於UDP在傳輸的過程中不需要和服務器建立鏈接。且沒有超時重發的的機制。故而傳輸很快。




UDP 發送數據

import socket

def main():

    # 1. 創建套接字
    udpSocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    #  2. 設置目的端口和IP
    sendArr = ('192.168.31.174',65535)
    while True:
        sendData = input('請輸入你要發送的信息')
        if sendData == "exit":
            break
            # 3. 發送數據
            # 發送數據,此處有一個坑是sendto()裏面的參數必須二進制數據,不能直接傳字符串
        udpSocket.sendto(sendData.encode('utf-8'),sendArr)
    # 4. 關閉套接字
    udpSocket.close()

if __name__ == '__main__':
    main()


UDP 接收數據

import socket

def main():
    # 1. 創建UDP套接字
    udpSocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    # 2. 綁定端口號
    udpSocket.bind(("", 7789))
    while True:
        # 3. 接收打印數據
        recvData = udpSocket.recvfrom(1024)
        content, destInfo = recvData
        print("content is %s"%content)
        # print("content is %s"%content.decode("utf-8"))
        print("content is %s" % content.decode("gbk"))  # windows默認編碼爲gbk
        print(recvData)

        # 4. 關閉套接字
    udpSocket.close()

if __name__ == '__main__':
    main()


UDP簡單半雙工聊天實現

# Author:Maomao Li

import socket


def send_msg(udp_socket):
    """發送信息"""
    # 發送
    # 獲取需要發送的內容
    desc_ip = input("請輸入需要發送的目的IP:")
    desc_port = int(input("請輸入需要發送的目的端口:"))
    send_data = input("請輸入需要發送的數據:")
    udp_socket.sendto(send_data.encode("utf-8"), (desc_ip, desc_port))


def resv_msg(udp_socket):
    """接收數據"""
    resv_data = udp_socket.recvfrom(1024)
    resv_msg, resv_ip = resv_data
    print("%s:%s" % (resv_msg.decode("utf-8"), resv_ip))


def mian():
    # 創建套接字
    udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    # 綁定信息
    udp_socket.bind(("",7789))

    # 循環來進行處理事情
    while True:
        op = print("請輸入功能 1發送 2接收 0退出:")
        if op == "1":
            send_msg(udp_socket)
        elif op == "2":
            resv_msg(udp_socket)
        elif op == "0":
            break
        else:
            print("輸入錯誤")

if __name__ == '__main__':
    mian()


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章