Python socket 粘包问题 报头
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python socket 粘包问题 报头,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2101字,纯文字阅读大概需要4分钟。
内容图文
![Python socket 粘包问题 报头](/upload/InfoBanner/zyjiaocheng/1094/c89fe6ea4f904fed8096e80ac82639ef.jpg)
一 socket(套接字)
1.什么是socket:Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。它把复杂的TCP/IP协议族隐藏在Socket接口后面,了socket以后,无需自己编写代码实现三次握手,四次挥手,ARP请求,打包数据等等,socket已经封装好了,只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。
2.基本语法
![技术分享图片](/img/jia.gif)
![技术分享图片](/img/jian.gif)
客户端 import socket # 1.创建socket对象 client = socket.socket() # 2.链接服务器 client.connect((ip,port)) # 3.收发数据 通常需要循环 client.send(二进制数据) # 只能发二进制数据 client.recv(字节数) # 收多少字节数 阻塞直到接收到数据 # 4.断开链接 client.close() 服务端 # 1.创建socket对象 server = socket.socket() # 2.绑定一个固定的ip和端口server.bind(ip,port)) # 3.开始监听客户端的到来 server.listen() # 可不填 # 4.接收客户端的链接请求 conn,addr = server.accept() # 阻塞直到客户链接到来 没有新连接则不可能执行该函数 # 5.收发数据 通常需要循环 conn.send(二进制数据) # 只能发二进制数据 conn.recv(字节数) # 收多少字节数 阻塞直到接收到数据 # 6.关闭双行通道和服务器conn.close() server.close() 复制代码
![技术分享图片](/img/jia.gif)
![技术分享图片](/img/jian.gif)
服务端套接字函数
s.bind() 绑定(主机,端口号)到套接字
s.listen() 开始TCP监听
s.accept() 被动接受TCP客户的连接,(阻塞式)等待连接的到来
客户端套接字函数
s.connect() 主动初始化TCP服务器连接
s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常
公共用途的套接字函数
s.recv() 接收TCP数据
s.send() 发送TCP数据(send在待发送数据量大于己端缓存区剩余空间时,数据丢失,不会发完)
s.sendall() 发送完整的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间时,数据不丢失,循环调用send直到发完)
s.recvfrom() 接收UDP数据
s.sendto() 发送UDP数据
s.getpeername() 连接到当前套接字的远端的地址
s.getsockname() 当前套接字的地址
s.getsockopt() 返回指定套接字的参数
s.setsockopt() 设置指定套接字的参数
s.close() 关闭套接字
面向锁的套接字方法
s.setblocking() 设置套接字的阻塞与非阻塞模式
s.settimeout() 设置阻塞套接字操作的超时时间
s.gettimeout() 得到阻塞套接字操作的超时时间
3.循环连接和循环通信
![技术分享图片](/img/jia.gif)
![技术分享图片](/img/jian.gif)
客户端 import socket client = socket.socket() client.connect((‘127.0.0.1‘,8080)) while True: msg = input(‘>>>:‘).encode(‘utf-8‘) if len(msg) == 0:continue client.send(msg) data = client.recv(1024) print(data) 服务端 import socket """ 服务端 固定的ip和port 24小时不间断提供服务 """ server = socket.socket() # 生成一个对象 server.bind((‘127.0.0.1‘,8080)) # 绑定ip和port server.listen(5) # 半连接池while True: conn, addr = server.accept() # 等到别人来 conn就类似于是双向通道print(addr) # (‘127.0.0.1‘, 51323) 客户端的地址while True: try: data = conn.recv(1024) print(data) # b‘‘ 针对mac与linux 客户端异常退出之后 服务端不会报错 只会一直收b‘‘if len(data) == 0:break conn.send(data.upper()) except ConnectionResetError as e: print(e) break conn.close()
原文:https://www.cnblogs.com/tfzz/p/11317612.html
内容总结
以上是互联网集市为您收集整理的Python socket 粘包问题 报头全部内容,希望文章能够帮你解决Python socket 粘包问题 报头所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。