udp協議 基於socketserver實現併發

2021-08-21 08:16:56 字數 2872 閱讀 6217

一:udp協議沒有粘包問題:

1,udp協議是資料報協議

客戶端:

import socket

client=socket.socket(socket.af_inet,socket.sock_dgram) #資料報協議-》udp

client.sendto('hello'.encode('utf-8'),('127.0.0.1',8080))#不需要建立鏈結,直接sendto傳送和訊息內容,對方的位址資訊

client.sendto('world'.encode('utf-8'),('127.0.0.1',8080))

# client.sendto(''.encode('utf-8'),('127.0.0.1',8080))

client.close()

服務端:

import socket

server=socket.socket(socket.af_inet,socket.sock_dgram) #資料報協議-》udp

server.bind(('127.0.0.1',8080))

data,client_addr=server.recvfrom(1) #b'hello'==>b'h'

print('第一次:',client_addr,data)

data,client_addr=server.recvfrom(1024) #b'world' =>b'world'

print('第二次:',client_addr,data)

# data,client_addr=server.recvfrom(1024)

# print('第三次:',client_addr,data)

server.close()

二;基於socketserver(基於udp協議)實現併發效果

1,服務端:

import socketserver

class myhandler(socketserver.baserequesthandler):

def handle(self):

#通訊迴圈

# print(self.client_address)

# print(self.request)

data=self.request[0]

print('客戶訊息',data)

self.request[1].sendto(data.upper(),self.client_address)

if __name__ == '__main__':

s=socketserver.threadingudpserver(('127.0.0.1',8080),myhandler)

s.serve_forever()

2  ,  客 戶端:

import socket

client=socket.socket(socket.af_inet,socket.sock_dgram) #資料報協議-》udp

while true:

# msg=input('>>: ').strip() #msg=''

msg='client444444'

client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))

data,server_addr=client.recvfrom(1024)

print(data)

client.close()

三:基於socketserver(基於tcp協議)實現併發效果 

1      客戶端鏈結

import socketserver

class myhandler(socketserver.baserequesthandler):

def handle(self):

#通訊迴圈

while true:

# print(self.client_address)

# print(self.request) #self.request=conn

try:

data=self.request.recv(1024)

if len(data) == 0:break

self.request.send(data.upper())

except connectionreseterror:

break

if __name__ == '__main__':

s=socketserver.threadingtcpserver(('127.0.0.1',8080),myhandler,bind_and_activate=true)

s.serve_forever()  # 代表連線迴圈

# 迴圈建立連線,每建立乙個連線就會啟動乙個執行緒(服務員)+呼叫myhanlder類產生乙個物件,

#呼叫該物件下的handle方法,專門與剛剛建立好的連線做通訊迴圈  、

2   服務端

import socket

phone=socket.socket(socket.af_inet,socket.sock_stream)

phone.connect(('127.0.0.1',8080)) # 指定服務端ip和埠

while true:

# msg=input('>>: ').strip() #msg=''

msg = 'client33333'  # msg=''

if len(msg) == 0:continue

phone.send(msg.encode('utf-8'))

data=phone.recv(1024)

print(data)

phone.close()

基於UDP協議的socket程式設計

一 socket概述 1.socket一般被稱為 套接字 網路上的兩個程式通過乙個雙向的通訊連線實現資料的交換,這個連線的一端就叫做socket。2.建立網路通訊連線至少需要乙個埠號 socket socket利用網路之間的通訊設施實現程序通訊,但它對通訊設施的細節不關心,只要通訊設施能夠提供足夠的...

基於UDP協議的socket程式設計

udp協議特點 1.無連線。服務端與客戶端傳輸資料之前不需要進行連線,且沒有超時重發等機制,只是把資料通過網路傳送出去。也正是因為此特點,所以基於udp協議的socket的客戶端在啟動之前不需要先啟動服務端。2.不可靠。資料在本地通過網路發出之後,udp協議會立即清除本地的快取,即使對方沒有收到該資...

基於udp協議的套接字及udp協議粘包問題

udp協議的套接字 udp協議傳輸 服務端和客戶端沒有建立連線一說。import socket 總結一下基礎工作流程 服務端生成套接字並繫結ip port,進入資料傳輸迴圈,服務端接受客戶端傳送的資訊和位址,然後服務端對客戶端請求做出響應,傳送處理好的資料根據而客戶端位址。客戶端建立套接字,直接進入...