Python-46 基於UDP協議的通信

服務端發送消息

服務端代碼:

import socket

udp_server = socket.socket(type=socket.SOCK_DGRAM) # 將類型修改爲udp 包的模式
ip_port = ('127.0.0.1',8005)
udp_server.bind(ip_port)

from_client_msg,client_addr = udp_server.recvfrom(1024)
print(from_client_msg,client_addr)

客戶端代碼:

import socket
udp_client = socket.socket(type=socket.SOCK_DGRAM)

ip_prot = ('127.0.0.1',8005)
udp_client.sendto(b'hello',ip_prot)

首先運行服務端,隨後啓動客戶端.
客戶端幾乎瞬間結束,查看服務端,收到返回值

b'hello' ('127.0.0.1', 49814)
# 127.0.0.1 是本機IP,49814是系統隨機爲服務端分配的端口號

UDP不需要建立連接可以直接發送

客戶端接收消息

服務端代碼:

import socket

udp_server = socket.socket(type=socket.SOCK_DGRAM) # 將類型修改爲udp 包的模式
ip_port = ('127.0.0.1',8005)
udp_server.bind(ip_port)

from_client_msg,client_addr = udp_server.recvfrom(1024) #1024 是接收單位大小,單位是B 無上限

udp_server.sendto(b'This is a server',client_addr) #回覆信息 第一個參數是數據內容,第二格式發送給誰 對方的地址

print(from_client_msg,client_addr)

客戶端代碼:

import socket
udp_client = socket.socket(type=socket.SOCK_DGRAM)

ip_prot = ('127.0.0.1',8005)
udp_client.sendto(b'hello',ip_prot)

from_server_msg,server_addr = udp_client.recvfrom(1014)
print(from_server_msg,server_addr)

TCP是有連接過程的,UDP沒有直接綁定端口IP進行發送.

TCP 多人排隊聊天

服務端

import time
import socket

server = socket.socket()

ip_prot = ('127.0.0.1',8005)
server.bind(ip_prot)
server.listen(2) # 表示除去當前已經建立連接的還允許2個排隊
while 1:
    conn,addr = server.accept()

    while 1:
        from_client_msg = conn.recv(1024)
        print("客戶端消息:",from_client_msg.decode('utf-8'))
        if from_client_msg.decode('utf-8') == 'quit':
            break

        to_client_msg = input("服務端發送 >>")
        conn.send(to_client_msg.encode('utf-8'))

    conn.close()
#server.close()

客戶端代碼

import time
import socket

client = socket.socket()
client.connect(('127.0.0.1',8005))

while 1:
    to_server_msg = input("發送內容 >>")

    client.send(to_server_msg.encode('utf-8'))
    if to_server_msg == 'quit':
        break
    from_server_msg = client.recv(1024)
    print("來自服務器消息: ",from_server_msg.decode('utf-8'))

client.close()

UDP多人聊天

客戶端代碼

import socket
udp_client = socket.socket(type=socket.SOCK_DGRAM)
ip_prot = ('127.0.0.1',8005)

while 1:
    to_server_msg = input("客戶端說:")
    udp_client.sendto(to_server_msg.encode("utf-8"),ip_prot)

    from_server_msg,server_addr = udp_client.recvfrom(1014)
    print(from_server_msg.decode("utf-8"),server_addr)

服務端

import socket

udp_server = socket.socket(type=socket.SOCK_DGRAM) # 將類型修改爲udp 包的模式
ip_port = ('127.0.0.1',8005)
udp_server.bind(ip_port)

while 1:
    from_client_msg,client_addr = udp_server.recvfrom(1024) #1024 是接收單位大小,單位是B 無上限
    print(from_client_msg.decode("utf-8"),client_addr)

    to_client_msg = input("服務端說:")
    udp_server.sendto(to_client_msg.encode('utf-8'),client_addr) #回覆信息 第一個參數是數據內容,第二格式發送給誰 對方的地址
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章