基於UDP協議的socket套接字程式設計

2022-05-07 05:03:12 字數 3789 閱讀 2402

import socket

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

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

while true:

data, client_addr = server.recvfrom(1024)

print('===>', data, client_addr)

server.sendto(data.upper(), client_addr)

server.close()

import socket

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

while true:

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

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

data, server_addr = client.recvfrom(1024)

print(data)

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

import socket

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

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

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

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

client.close()

upd協議一般不用於傳輸大資料。

udp套接字雖然沒有粘包問題,但是不能替代tcp套接字,因為upd協議有乙個缺陷:如果資料傳送的途中,資料丟失,則資料就丟失了,而tcp協議則不會有這種缺陷,因此一般upd套接字使用者無關緊要的資料傳送,例如qq聊天。

#_*_coding:utf-8_*_

__author__ = 'nick'

import socket

ip_port = ('127.0.0.1', 8081)

udp_server_sock = socket.socket(socket.af_inet, socket.sock_dgram) #買手機

udp_server_sock.bind(ip_port)

while true:

qq_msg, addr = udp_server_sock.recvfrom(1024)

print('來自[%s:%s]的一條訊息:\033[1;44m%s\033[0m' %

(addr[0], addr[1], qq_msg.decode('utf-8')))

back_msg = input('回覆訊息: ').strip()

udp_server_sock.sendto(back_msg.encode('utf-8'), addr)

#_*_coding:utf-8_*_

__author__ = 'nick'

import socket

bufsize = 1024

udp_client_socket = socket.socket(socket.af_inet, socket.sock_dgram)

qq_name_dic =

while true:

qq_name = input('請選擇聊天物件: ').strip()

while true:

msg = input('請輸入訊息,回車傳送: ').strip()

if msg == 'quit': break

if not msg or not qq_name or qq_name not in qq_name_dic: continue

udp_client_socket.sendto(msg.encode('utf-8'), qq_name_dic[qq_name])

back_msg, addr = udp_client_socket.recvfrom(bufsize)

print('來自[%s:%s]的一條訊息:\033[1;44m%s\033[0m' %

(addr[0], addr[1], back_msg.decode('utf-8')))

udp_client_socket.close()

#_*_coding:utf-8_*_

__author__ = 'nick'

import socket

bufsize = 1024

udp_client_socket = socket.socket(socket.af_inet, socket.sock_dgram)

qq_name_dic =

while true:

qq_name = input('請選擇聊天物件: ').strip()

while true:

msg = input('請輸入訊息,回車傳送: ').strip()

if msg == 'quit': break

if not msg or not qq_name or qq_name not in qq_name_dic: continue

udp_client_socket.sendto(msg.encode('utf-8'), qq_name_dic[qq_name])

back_msg, addr = udp_client_socket.recvfrom(bufsize)

print('來自[%s:%s]的一條訊息:\033[1;44m%s\033[0m' %

(addr[0], addr[1], back_msg.decode('utf-8')))

udp_client_socket.close()

客戶端1執行結果

客戶端2執行結果

基於UDP協議的socket程式設計

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

基於UDP協議的socket程式設計

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

基於Socket的UDP和TCP協議

一 概述 tcp 傳輸控制協議 和udp 使用者資料報協議 是網路體系結構tcp ip模型中傳輸層一層中的兩個不同的通訊協議。tcp 傳輸控制協議,一種面向連線的協議,給使用者程序提供可靠的全雙工的位元組流,tcp套介面是位元組流套介面 stream socket 的一種。udp 使用者資料報協議。...