网络编程---scoket--Udp例子

例子一、类似于QQ聊天(A和B聊天)

笔者写的

import socket
sk = socket.socket(type = socket.SOCK_DGRAM)
sk.bind(('127.0.0.1',8080)) #IP,端口 必须是在元组里

while Ture:
    msg,addr = sk.recvfrom(1024)
    print(msg.decode('utf-8'))
    info = input('>>>>')
    if info == 'q':break
    sk.sendto(info.encode('utf-8'),addr)
    
sk.clock()
server端
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
ip_post = ('127.0.0.1',8080)

while True:
    info = input('Client1>>>>>')
    if info == 'q' or info =='Q':break
    sk.sendto(info.encode('utf-8'),ip_post)
    # sk.sendto(bytes('Client1 input :'+info,encoding='utf-8'),ip_post) # 等同于上句
    msg,addr = sk.recvfrom(1024)
    print(msg.decode())

sk.close()
client A端
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
ip_post = ('127.0.0.1',8080)

while True:
    info = input('Client2>>>>>')
    if info == 'q' or info =='Q':break
    sk.sendto(info.encode('utf-8'),ip_post)
    # sk.sendto(bytes('Client2 input :'+info,encoding='utf-8'),ip_post) # 等同于上句
    msg,addr = sk.recvfrom(1024)
    print(msg.decode())

sk.close()
client B端

教学里的

import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.bind(('127.0.0.1',9090))
while True:
    msg,addr = sk.recvfrom(1024)
    print('来自[%s:%s]的消息--%s'%(addr[0],addr[1],msg.decode('utf-8')))

    inp = input('>>>')
    sk.sendto(inp.encode('utf-8'),addr)

sk.close()
server
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
addr = ('127.0.0.1',9090)
while True:
    msg = input('>>>')
    sk.sendto(msg.encode('utf-8'),addr)
    msg_recv,addr = sk.recvfrom(1024)
    print(msg_recv.decode('utf-8'))
sk.close()
client

例子二、时间格式,客户端输入格式、返回服务器时间和客户端的格式一样

笔者写的

# 时间同步
# 接收信息 时间格式
# 将我的时间转化成接收到的格式的
# 再发回给客户端


import time

import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.bind(('127.0.0.1',8080))

while True:
    msg,addr = sk.recvfrom(1024)
    msg = msg.decode('utf-8')
    if '-' in msg:
        sk.sendto(bytes(time.strftime("%Y-%m-%d",time.localtime()),encoding='utf-8'),addr)
    elif ':' in msg:
        sk.sendto(bytes(time.strftime("%Y:%m:%d",time.localtime()),encoding='utf-8'),addr)
    elif '/' in msg:
        sk.sendto(bytes(time.strftime("%Y/%m/%d",time.localtime()),encoding='utf-8'),addr)
    else:
        sk.sendto(bytes(time.strftime("%Y-%m-%d",time.localtime()),encoding='utf-8'),addr)

sk.close()
server
import socket
sk =socket.socket(type=socket.SOCK_DGRAM)
ip_post = ('127.0.0.1',8080)
while True:
    t = input('时间格式:')
    sk.sendto(t.encode('utf-8'),ip_post)
    msg,addr = sk.recvfrom(1024)
    print(msg.decode('utf-8'))

sk.close()
client

教学里的

# 需求
    # 写一个时间同步的服务器
    # 服务端接收请求
    # 按照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()
server
# client端每隔一段时间发送请求到服务端
# 发送时间的格式
import time
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()

# 方式一
# 操作系统的定时任务 + python代码的形式
# 方式二
# while True + time.sleep的形式
client

 

posted on 2019-05-02 19:50  Jerry-Wang  阅读(101)  评论(0)    收藏  举报