建立UDP连接的示例:

# server端

import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.bind(('127.0.0.1', 10010))
while True:
conn, addr = sk.recvfrom(1024)
print(conn.decode())
msg = input('>>>: ')
sk.sendto(msg.encode(),addr)
if msg == 'q': break sk.close()
# client 端

import socket
sk = socket.socket()
sk.connect(('127.0.0.1', 10010))
while True:
msg = sk.recv(1024)
print(msg.decode())
msg1 = input('>>>>: ')
sk.send(msg1.encode())

socketserver示例:

# server端
import socketserver
class Myserver(socketserver.BaseRequestHandler):
def handle(self):
conn = self.request
while True:
msg = input('>>>.')
conn.send(msg.encode())
msg = conn.recv(1024)
print(msg.decode()) server = socketserver.ThreadingTCPServer(('127.0.0.1',10010),Myserver)
server.serve_forever()
client端

import socket
sk = socket.socket()
sk.connect(('127.0.0.1', 10010))
while True:
msg = sk.recv(1024)
print(msg.decode())
msg1 = input('>>>>: ')
sk.send(msg1.encode())

文件下载:(文件上传则相反)

# server端

import os
import json
import socket
import struct file_path = r'E:\study\teacher\day22 视频以及笔记\02 深圳骑士计划脱产班3期 day22 面向对象之反射.mp4'
file_size = os.path.getsize(file_path) # 获得文件大小
file_name = os.path.basename(file_path) # 获得文件名
file_info = {'file_size': file_size, 'file_name': file_name, 'operate': 'download'}
json_file_info = json.dumps(file_info) # json字典,用于网络传输
len_json_file_info = len(json_file_info) # 求出json后字典bytes的长度
bytes_json_file_info = json_file_info.encode() # 将字典json后 在转换成bytes格式 sk = socket.socket()
sk.bind(('127.0.0.1', 10010))
sk.listen() conn ,addr = sk.accept()
conn.send(struct.pack('i', len_json_file_info)) # 发送struck后的len字典长度
conn.send(bytes_json_file_info) # 发送字典 while file_size > 0:
with open(file_path, 'rb') as f:
count = f.read(2048) # 每次读2048字节
conn.send(count) # 发送读取到的内容
file_size -= len(count) # 总大小,减去已发送的大小 conn.close()
sk.close()
# client 端

import socket
import struct
import json sk = socket.socket()
sk.connect(('127.0.0.1', 10010))
len_info = sk.recv(4) # 收到4个字节,内容为struct了字典长度
len_file_info = struct.unpack('i', len_info)[0] # 结struct包,拿元组第一个元素,就是字典的长度
file_info = sk.recv(len_file_info).decode() # 按照字典长度,接收相应的数据,并解码
info_dic = json.loads(file_info) # 字典去json化 with open(info_dic['file_name'], 'wb') as f1:
while info_dic['file_size'] > 0:
count = sk.recv(2048)
f1.write(count)
info_dic['file_size'] -= len(count)
sk.close()

day 25 udp, socketserver的更多相关文章

  1. tcp上传大文件举例、udp实现qq聊天、socketserver模块实现并发

    为什么会出现粘包现象(day31提到过,这里再举个例子) """首先只有在TCP协议中才会出现粘包现象,因为TCP协议是流式协议它的特点是将数据量小并且时间间隔比较短的数 ...

  2. tcp\udp 操作系统发展史

    目录 为什么会出现粘包现象 socket发送大文件示例 UDP协议 基于UDP实现简易版本的qq 总结: SocketServer模块介绍(让tcp也能支持并发) 为什么会出现粘包现象 TCP 三次握 ...

  3. windows常用端口对应表

    端口概念 在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem.集线器.交换机.路由器用于连接其他网络设备的接口,如RJ-45端口.SC端口等等.二是逻辑意义 ...

  4. port与大全portClose方法

    在网络技术,port(Port)通常,有两种含义:首先,物理意义port,例,ADSL Modem.枢纽.开关.路由器连接其他网络设备的接口,如RJ-45port.SCport等等.第二个是逻辑意义p ...

  5. port大全及port关闭方法

    在网络技术中,port(Port)大致有两种意思:一是物理意义上的port,比方,ADSL Modem.集线器.交换机.路由器用于连接其它网络设备的接口,如RJ-45port.SCport等等.二是逻 ...

  6. 网络基础二 tcp/ip协议簇 端口 三次握手 四次挥手 11种状态集

    第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成 ...

  7. 网络-05-端口号-F5-负载均衡设-linux端口详解大全--TCP注册端口号大全备

    [root@test1:Standby] config # [root@test1:Standby] config # [root@test1:Standby] config # [root@test ...

  8. CentOS 7 服务端口表

    # Note that it is presently the policy of IANA to assign a single well-known# port number for both T ...

  9. Windows操作系统上各种服务使用的端口号, 以及它们使用的协议的列表

    Windows操作系统上各种服务使用的端口号, 以及它们使用的协议的列表 列表如下 Port Protocol Network Service System Service System Servic ...

随机推荐

  1. UnicodeDecodeError: 'ascii' codec can't decode byte 0x9c in position 1: ordinal not in range(128)

    待研究: compressed_data = zlib.compress(json.dumps(data), 9) file_data = MySQLdb.escape_string(compress ...

  2. Haskell语言学习笔记(78)fix

    fix 函数 fix 是一个在 Data.Function 模块中定义的函数,它是对于递归的封装,可以用于定义不动点函数. fix :: (a -> a) -> a fix f = let ...

  3. redisclient can not connect

    假如采用传统请执行一下命令: systemctl stop firewalld systemctl mask firewalld 并且安装iptables-services: yum install ...

  4. TCP/IP网络协议的通俗理解,SOCKET,HTTP,SOAP

    TCP/IP,HTTP,SOAP等协议之区别   术语TCP/IP代表传输控制协议/网际协议,指的是一系列协议.“IP”代表网际协议,TCP和UDP使用该协议从一个网络传送数据包到另一个网络.把IP想 ...

  5. [PHP]PHP定时任务的实现

    ---------------------------------------------------------------------------------------------------- ...

  6. rhel7磁盘管理

     一.MBR主引导记录        MBR有512个字节,分为三个部分:第一部分446个字节,存储了引导分区:第二部分64字节为分区表:第三部分2个字节结束符:每个分区需16个字节,所以MBR的模式 ...

  7. Structs复习 Structs标签

    如果类型是object Structs会把它默认解析为OGNL表达式 想取字符串的话就 ‘’ ‘ ’ ‘’ jar包 web.xml. <?xml version="1.0" ...

  8. C++ 动态创建按钮及 按钮的消息响应

    动态创建的按钮 都会在消息 OnCommand 中得到处理,无论是什么消息,都会处理的 1\创建按钮 CButton* btn = new CButton(); btn->Create(_T(, ...

  9. C# 保证数据长度相同

    /// <summary> /// 保证数据长度相同 /// </summary> /// <param name="obj"></par ...

  10. Python算法(一)冒泡排序

    3 5 1 6 2 1)第一次:找到这些数中最大的一个,并把它放最后. 3.5找到大的数放到第二个位置 5.1找到大的数放到第三个位置 5.6找到大的数放到第四个位置 2.6找到大的数放大第五个位置 ...