python学习day31 网络编程2 UPD协议 黏包问题
http://www.cnblogs.com/Eva-J/articles/8244551.html#_label4
upd
服务端:
import socket sk = socket.socket(type=socket.SOCK_DGRAM) # 建立一个socket对象, # 指定以UDP协议的形式来连接 sk.bind(('127.0.0.1',8080)) # 指定服务的地址 msg, addr = sk.recvfrom(1024) # 接收消息,发送端的地址 print(msg, addr) sk.sendto(b'HELLO', addr) # 给发送端回复消息 还要把对方地址发过去 sk.close() # 关闭socket连接
客户端:
import socket sk = socket.socket(type=socket.SOCK_DGRAM) ip_port = ('127.0.0.1',8080) sk.sendto(b'hello', ip_port) # 直接给服务器发送一段消息 msg, addr = sk.recvfrom(1024) # 接收对面的回信 也会收到地址 print(msg) sk.close()
例子:
1.
需求
写一个时间同步的服务器
服务端接收请求
按照client端发送的时间格式,将服务器时间转换成对应格式
发送给客户端
服务端:
import time import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1',9000)) while True: msg,addr = sk.recvfrom(1024) # msg 客户端发送给server端的时间格式 "%Y-%m-%d %H:%M-%S" time_format = msg.decode('utf-8') time_str = time.strftime(time_format) sk.sendto(time_str.encode('utf-8'),addr) sk.close()
客户端:发送时间格式
import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.sendto('%Y-%m-%d %H:%M:%S'.encode('utf-8'), ('127.0.0.1',9000)) msg, addr = sk.recvfrom(1024) print(msg.decode('utf-8')) sk.close()
黏包
http://www.cnblogs.com/Eva-J/articles/8244551.html#_label5
注意:只有TCP有粘包现象,UDP永远不会粘包