Python socket 通信功能简介
2024-08-26 11:55:48
常用的地址家族
AF_UNIX:基于文件,实现同一主机不同进程之间的通信
AF_INET:基于网络,适用于IPv4
AF_INET6:基于网络,使用于IPv6
常见的连接类型
SOCK_STREAM:即TCP/IP。面向连接的套接字,通信之前必须建立可靠的连接。面向连接的套接字提供序列化的、可靠的和不重复的数据交付,而没有记录边界。
SOCK_DGRAM:即UDP。面向非连接的套接字,通信之前无需建立连接。在数据传输过程中无法保证数据的有序性、可靠性和重复性。然而数据报确实保存了记录边界,意味着数据是以整体发送的,而非事先切割多个片段。
socket通信
server端
import socket
server = socket.socket() # 默认是AF_INET、SOCK_STREAM
server.bind(("localhost",)) # 将主机号与端口绑定到套接字
server.listen() # 设置并启动TCP监听器
while True:
conn,addr = server.accept() # 被动接受TCP连接,一直等待连接到达
while True:
data = conn.recv() # 接收TCP消息,并制定最大长度
if not data:
print("连接已断开")
break
conn.send(data.upper()) # 将接收到的数据转为大写在发回给它
server.close() client端
import socket
client = socket.socket() # 默认是AF_INET、SOCK_STREAM
client.connect(("localhost",))
while True:
s = input(">>")
client.send(s.encode("utf-8"))
data = client.recv()
client.close()
socketserver模块
使用socketserver实现多并发
import socketserver
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
while True:
self.data = self.request.recv()
if not self.data:
print("%s客户端连接已断开"%self.client_address)
break
self.request.sendall(self.data.upper())
if __name__ == "__main__":
server = socketserver.ThreadingTCPServer(("localhost",),MyServer) # 开启一个线程
server.serve_forever()
参考:
https://www.jb51.net/article/145995.htm
最新文章
- xamarin UWP平台下 HUD 自定义弹窗
- class-dump-z下载地址
- JMeter脚本参数化和断言设置( CSV Data Set Config )
- php生成json和js解析json
- 原理图及PCB设计
- 熊掌号:";搜索+信息流";双引擎与";百家号+熊掌号";双品牌内容平台
- 深入学习JS执行--单线程的JS
- 1105 Spiral Matrix
- 'QuerySet' object has no attribute '_meta'
- Chemical table CodeForces - 1012B
- 【SSH网上商城项目实战15】线程、定时器同步首页数据(类似于博客定期更新排名)
- Linux下定时任务Crontab的使用
- 第53天:鼠标事件、event事件对象
- oracle驱动包maven下载失败解决
- 1.4 Application应用
- GreenPlum 大数据平台--外部表(三)
- bzoj4756 [Usaco2017 Jan]Promotion Counting
- VB.NET概述
- 51nod1091(贪心)
- ubuntu16.04安装 java JDK8