同一计算机上不同进程之间的通信 socket 模块

  • socket 模块是 Python 标准库中的一个模块,提供了对网络编程的支持,允许在应用程序之间进行网络通信,实现网络套接字的创建、连接、发送和接收数据等
  • socket 模块支持 TCP 套接字(socket.SOCK_STREAM)和 UDP 套接字(socket.SOCK_DGRAM)
  • 网络通信:在不同计算节点可以通过网络进行通信,用于分布式计算、数据共享和协同工作等任务。
  • 远程控制数据传输:在不同计算节点之间传输数据
  • 并行计算:在多个计算节点之间进行并行计算,将任务分发到不同的节点上,并通过套接字进行通信和协同工作,以实现高性能的并行计算。
  • 实时数据传输:传感器数据的采集和实时处理,网络视频流的传输和处理等

socket 模块的创建与应用

创建 socket 对象

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  • socket.AF_INET:这个参数指定了地址簇,表示使用IPv4地址族
  • socket.SOCK_STREAM:这个参数指定了套接字类型,表示使用流式套接字(TCP)

绑定地址和端口

  • 服务器的地址
    • host = 'localhost'
  • 服务器的端口号
    • port = 12345 
  • s.bind((host, port))
import socket


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = 'localhost'  
port = 12345  
s.bind((host, port))

监听连接

s.listen(1)
  • 可以传入一个参数 backlog,表示等待连接队列的最大长度

连接与接收解码

conn, addr = s.accept()
  • 调用 accept() 方法会阻塞程序的执行,直到有客户端连接进来。一旦有客户端连接进来,accept() 方法会返回两个值:
    • conn:表示与客户端建立的新的套接字对象,可以使用该对象与客户端进行通信
      • 这个新的套接字对象专门用于与该客户端进行通信
    • addr:表示客户端的地址信息,通常是一个元组,包含客户端的IP地址和端口号
signal = conn.recv(1024).decode()
  • 在与客户端建立的套接字对象 conn 上调用 recv() 方法,用于接收客户端发送的数据。
    • recv() 方法用于从套接字接收数据,它的参数指定了每次最多接收的字节数
    • 接收到的数据是一个字节序列(bytes),通常需要将其解码为字符串进行处理

发送信号

s.send(signal.encode())

关闭 socket 

socket.close()  #关闭套接字连接

Example

process1.py

import socket


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = 'localhost'  
port = 12345  
s.bind((host, port))

s.listen(1)

print("Waiting for connection...")
conn, addr = s.accept()
print("Connection established with", addr)

signal = conn.recv(1024).decode()
print("Received signal:", signal)

response = "Signal received from process1.py"
conn.send(response.encode())

conn.close()

process2.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = 'localhost' 
port = 12345 
s.connect((host, port))

signal = "Signal from process2.py"
s.send(signal.encode())

response = s.recv(1024).decode()
print("Received response:", response)

s.close()

result 

 

socket 属性与方法总结

属性

  • family:套接字的地址族
  • socket.AF_INET:IPv4 地址族(默认)
  • socket.AF_INET6:IPv6 地址族
  • socket.AF_UNIX:UNIX 域套接字(也称为本地套接字)。用于在同一台机器上的进程之间进行通信。

  • type:套接字的类型
  • socket.SOCK_STREAM:面向连接的 TCP 套接字类型
  • socket.SOCK_DGRAM:无连接的 UDP 套接字类型
  • socket.SOCK_RAW:原始套接字类型。允许直接访问底层网络协议
  • socket.SOCK_SEQPACKET:可靠的连续数据包套接字类型

fileno():返回套接字的文件描述符

timeout:设置套接字操作的超时时间

getsockname():返回套接字的本地地址

getpeername():返回套接字连接的远程地址

方法

socket():创建一个新的套接字对象

bind(address):将套接字绑定到指定的地址

listen(backlog):开始监听连接请求,指定同时允许的最大连接数

accept():接受客户端的连接请求,返回一个新的套接字对象和客户端地址

connect(address):与服务器建立连接

send(data):发送数据到连接的另一端

recv(bufsize):从连接的另一端接收数据

close():关闭套接字连接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

River Chandler

谢谢,我会更努力学习工作的!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值