boost asio客户端接受数据_数据传输 - v0

本文介绍了如何使用Python3和Boost ASIO库在两台机器间进行数据传输。首先展示了简单的服务器(server.py)和客户端代码,然后扩展到服务器能与多个客户端进行交互(server-v1.py)。然而,当前设计存在缺陷,一旦任一端停止程序,连接即断开,并且服务器无法在客户端断开后继续服务其他客户端。作者将继续研究以完善通信方案。
摘要由CSDN通过智能技术生成

a8e63e735b58448ce74e1622d4b80a48.png

我的需求是想在两个机器上仅利用python3实现数据传输。

Socket编程:

定义A机器为服务器,B机器为客户端。

在服务器上实现如下代码(server.py)

import socket
server = socket.socket()
server.bind(("A机器的IP",6969)) #绑定要监听的端口port
server.listen() # 监听
print('waiting the call')
conn,addr = server.accept() # 等电话打进来,并且返回连接对象,
print(conn)
print('the call has comming')
data = conn.recv(1024) #接收客户端的消息,这里是一个字符串
print('data:',data.decode()) # 将接受的数据进行解码
conn.send(data.upper()) # 将字符串变成大写后发生给客户端

在客户端上实现如下代码:

import socket
client = socket.socket() # 有一些默认参数,即可使用ipv4,这一句是声明socket类型和返回socket连接对象
client.connect(("A机器的IP",6969)) # 建立连接:传入服务器端IP号和要连接的应用程序的端口号
#client.send(b'Hello') # 这里只能发生字节流信息,否则报错
client.send('我是Hello'.encode(encoding='utf-8')) # 需要变成utf-8编码形式
data = client.recv(1024) #客户端可以接收服务器端的消息
print(data.decode())
client.close()

服务器端运行server.py之后,在客户端端也运行上述其对应的代码:

运行结果如下:

88b4a817736e3f37f390d9535cbd0230.png

e614c4f46b586f1e096dc44eee112681.png

——————————————————————————————————————

将需求扩展:作为服务器的A机器可以实现与客户端的多次交流,且客户端可以不止一个。

在服务器上实现以下代码(server-v1.py)

'''
服务器端:
'''
import socket
server = socket.socket()
server.bind(("A机器的IP",6969)) #绑定要监听的端口port
server.listen(5) # 监听,这里表示最多有5个客户端连接服务器,python2不好使
print('waiting the call')
while True:
    conn,addr = server.accept() # 等电话打进来,每个conn代表一个客户端的连接
    print(conn)
    print('the call has comming')
    while True:
        data = conn.recv(1024)
        if not data :
            print('this user is end,exit!n next user')
            break
        print('data:',data.decode())
        conn.send(data.upper()) #服务器发送有最大值限制,比如32192M(瞎说的),使用sendall这个函数可以,但是客户端不能接受很多,事实上ssh确实有接受最大值限制

在客户端上实现以下代码:

import socket
client = socket.socket()  # 有一些默认参数,即可使用ipv4,这一句是声明socket类型和返回socket连接对象
client.connect(("A机器的IP", 6969))
while True:
    msg = input("massage:").strip()
    if len(msg) == 0:
        continue
    client.send(msg.encode(encoding='utf-8'))  # 不能发空的东西
    data = client.recv(1024)
    print(data.decode())
client.close()

两端代码在先后依次在服务器端和客户端执行结果如下:

5ac4d17cab4b9a558da6946b6ce04198.png

8ebd1f6df7a444e30374aea9e3e489ca.png

这两段代码的设计也存在一定的问题,一旦双方任意一个机器停掉其程序的运行,则传输立即结束;

而且A服务器也无法实现与多台客户端的交流,第一次与客户端实现交流后,当客户端断开连接,服务器端也会自动停止程序的运行。

参考链接: https://blog.csdn.net/weixin_42053726/article/details/86750117

PS:感谢参考文章的作者,虽然需求问题尚未完全解决,但也对两端通信进行了初步的学习,后续待我继续深耕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值