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 使用者資料報協議。...