首页 > 系统相关 >python多进程通过socket通讯

python多进程通过socket通讯

时间:2024-12-26 09:09:26浏览次数:7  
标签:通讯 socket python server connection client data 客户端

服务进程和客户端同体,代码:

import socket
import multiprocessing
 
def handle_server(connection):
    data = connection.recv(1024)
    print("接收到客户端请求:", data.decode(), "\n")
    # 发送数据
    connection.sendall('我是服务器进程,哈哈'.encode('utf-8'))
    connection.close()
    
def handle_client():
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    host = '127.0.0.1'
    port = 5001
    
    # 连接服务器
    client_socket.connect((host, port))
    
    # 发送数据给服务器
    data = '你好,我是主进程的一个子进程。'
    client_socket.send(data.encode())
    
    # 接收服务器发送的响应数据
    response = client_socket.recv(1024).decode()
    print('服务器的响应:', response)
    
    # 关闭客户端连接
    client_socket.close()
 
def main():
    # 创建TCP/IP socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    #server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 
    # 绑定地址和端口
    server_address = ('127.0.0.1', 5001)
    server_socket.bind(server_address)
 
    # 监听客户端连接
    server_socket.listen(5)
        
    process2 = multiprocessing.Process(target=handle_client, args=())
    process2.start()
    #process2.join()
 
    # 多进程处理连接
    while True:
        connection, client_address = server_socket.accept()
        print("连接地址:", client_address)
        
        process1 = multiprocessing.Process(target=handle_server, args=(connection,))
        process1.start()
        #process1.join()
 
if __name__ == "__main__":
    main()

 

为了测试方便,增加了一个客户端:

import socket

# 创建一个socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 获取本地主机名
host = '127.0.0.1'
port = 5001

# 连接服务器
client_socket.connect((host, port))

# 发送数据给服务器
data = '你好,我是另外一个进程。'
client_socket.send(data.encode())

# 接收服务器发送的响应数据
response = client_socket.recv(1024).decode()
print('服务器的响应:', response)

# 关闭客户端连接
client_socket.close()

 

执行结果:

 

标签:通讯,socket,python,server,connection,client,data,客户端
From: https://www.cnblogs.com/xuxiaobo/p/18631787

相关文章

  • Python 有哪些常用的库
    Python拥有一个庞大的生态系统,其中包含了许多用于不同领域的库。以下是一些常用的Python库:1.标准库Python的标准库非常强大,包括了用于文件操作、系统调用、网络通信等的模块。2.Web开发Flask:一个轻量级的Web应用框架。Django:一个高级的Web框架,内置了用户认证、内......
  • python图片脚本4-批量图片加水印(详细注释+GUI界面+exe可执行文件)
    目录前言导航pillow库的使用篇tkiner库的使用篇图片脚本篇源码批量处理图片尺寸脚本源码效果GUI界面源码效果打包成.exe可执行文件共勉博客前言本文介绍一个用python第三方库pillow写的批量处理图片加水印的脚本,以及脚本对应的使用tkinter库写的GUI界面并把它打......
  • Python 抽象基类 ABC :从实践到优雅
    今天我们来聊聊Python中的抽象基类(AbstractBaseClass,简称ABC)。虽然这个概念在Python中已经存在很久了,但在日常开发中,很多人可能用得并不多,或者用得不够优雅。让我们从一个实际场景开始:假设你正在开发一个文件处理系统,需要支持不同格式的文件读写,比如JSON、CSV、XML等。......
  • Python数据分析_Pandas_数据分析入门_3
    文章目录今日内容大纲介绍1.DataFrame-保存数据到文件2.DataFrame-读取文件数据3.DataFrame-数据分析入门4.DataFrame-分组聚合计算5.Pandas-基本绘图6.Pandas-常用排序方法7.Pandas案例-链家数据分析7.Pandas案例-链家数据分析_GIF_demo了解数据df1.info()df1.describ......
  • python爬虫实验:用Python爬取链家指定数据--附完整代码(基于requests和BeautifulSoup实
    1、前言 本实验实现了对链家房屋名字,所在小区,装饰,是否核验,楼层,总楼层以及租金进行爬取,仅供学习使用。2、url分析第二页:https://cd.lianjia.com/ershoufang/pg2/第三页:https://cd.lianjia.com/ershoufang/pg3/故第i页的url为:https://cd.lianjia.com/ershoufang/pg{i}/......
  • 3款.NET开源、功能强大的通讯调试工具,效率提升利器!
    前言今天大姚给大家分享3款.NET开源、功能强大的通讯调试工具,帮助大家提高通讯调试的效率和准确性。LLCOMLLCOM是一个.NET开源的、功能强大的串口调试工具。支持Lua自动化处理、串口调试、串口监听、串口曲线、TCP测试、MQTT测试、编码转换、乱码恢复等功能。项目开源地址:htt......
  • Python的安装以及环境变量的配置
    一、python是什么及如何安装?Python是一种面向对象、解释型、动态类型计算机程序设计语言,是一种面向对象的动态类型语言;其能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。二、安装步骤下载地址:https://www.python.org/downloads/windows/下载完成后......
  • Python变量与数据类型
    一、什么是Python变量1,变量就是数据的别名2,使用变量等同于使用数据3,随着程序的进行,变量发生变化#将数据10赋予变量(别名)a,可以使用a代替10a=10b=20c=30#通过print函数可以将多个内容输出到控制台print(a)print(b)print(c)print(a+b)print(a+c)print(b......
  • python多进程,通过内存共享来通信,使用进程锁来防止数据问题
    代码:importmultiprocessingimporttime'''使用锁和multiprocessing.Value,multiprocessing.Array,multiprocessing.Manager().list'''defworker1(shared_number1,lock):for_inrange(10):withlock:......
  • python多进程之间通讯,消息队列Queue
    代码:frommultiprocessingimportProcess,Queuedefproducer(q):myinfo="包子"q.put(myinfo)print(f"生产了{myinfo}")myinfo="饺子"q.put(myinfo)print(f"生产了{myinfo}\n")''......