socket (套接字)

tcp(黏包现象原因) 传输中由于内核区缓冲机制(等待时间,文件大小),会在 发送端 缓冲区合并连续send的数据,也会出现在 接收端 缓冲区合并recv的数据给指定port.

解决办法: 引入内置模块 struct ( 这个模块可以把要发送的数据长度转换成固定长度的字节。这样客户端每次接收消息之前只要先接受这个固定长度字节的内容看一看接下来要接收的信息大小,那么最终接受的数据只要达到这个值就停止,就能刚好不多不少的接收完整的数据了。)

  该模块可以把一个类型,如数字,转成固定长度的bytes (2的32次方)

-2147483648 <= number <= 2147483647 #这个是范围

# 客户端
import time,struct
import socket
sk = socket.socket() sk.connect(('127.0.0.1',9000))
time.sleep(0.5)
num = struct.unpack('i',sk.recv(4)) print(sk.recv(num[0]).decode('utf-8'))
print(sk.recv(1024))
----------------------------
# 服务端
import time,struct
import socket
sk = socket.socket() sk.connect(('127.0.0.1',9000))
time.sleep(0.5) num = struct.unpack('i',sk.recv(4))
print(sk.recv(num[0]).decode('utf-8'))
print(sk.recv(1024))

socketserver

SocketServer内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理多个客户端请求的Socket服务端。
即:每个客户端请求连接到服务器时,Socket服务端都会在服务器是创建一个“线程”或者“进程” 专门负责处理当前客户端的所有请求
# socketserver模块 上层模块 基于底层socket进一步改造,实现更多功能,tcp协议的server端的并发
# socket模块 所有网络服务的最底层 socket
import socketserver

class Myserver(socketserver.BaseRequestHandler):

    def handle(self):
# 必须实现haddle方法
# 在简历连接之后所有内容都在haddle中实现就可以了
# ThreadingTCPServer 多线程处理了并发
print('-->','执行我啦')
conn = self.request
while True:
msg = conn.recv(1024).decode()
print(msg)
conn.send(msg.upper().encode()) server = socketserver.ThreadingTCPServer(('127.0.0.1',9000),Myserver)
server.serve_forever() #一直在执行

server.py

import socket
import time
sk = socket.socket() time.sleep(1)
sk.connect(('127.0.0.1',9000)) while True:
sk.send(b'hello')
msg = sk.recv(1024)
print(msg) sk.close()

client.py



												

最新文章

  1. tomcat启动的了,但是加载项目失败
  2. JS中script词法分析
  3. shell中测试命变量是否已经定义
  4. NoSQL生态系统——类似Bigtable列存储,或者Dynamo的key存储(kv存储如BDB,结构化存储如redis,文档存储如mongoDB)
  5. mongo vue的常用操作
  6. php empty isset is_null
  7. leetcode 66
  8. 【Python笔记】异常处理
  9. Jetty实践-Hello World
  10. bzoj2822: [AHOI2012]树屋阶梯
  11. 使用PhpIniDir加载php配置文件出错,不能解析。
  12. dotweb框架之旅 [四] - 常用对象-HttpContext
  13. AOF持久化
  14. [BZOJ]2194: 快速傅立叶之二
  15. 【Unity Shaders】Reflecting Your World —— 在Unity3D中创建Cubemaps
  16. P5239 回忆京都(洛谷3月月赛T2)
  17. Android 源码编译之旅
  18. Deep Reinforcement Learning: Pong from Pixels
  19. Android众说纷纭分辨率
  20. 循环插入oracle 存储过程

热门文章

  1. cadence动态铜皮的参数设置
  2. java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!
  3. sftp,ftp文件下载
  4. WEB-INF目录与META-INF目录的作用(转载)
  5. AcWing 793. 高精度乘法
  6. 20191225_Python构造函数知识以及相关注意事项
  7. python的setup和teardown
  8. awk从放弃到入门(2):awk分隔符
  9. LED Decorative Light Manufacturer - LED Neon Rope: 5 Advantages
  10. 红帽 Red Hat Linux相关产品iso镜像下载【百度云】【更新7.6】