python 使用socket模块进行实时显示数据

本文介绍了一种使用TCP协议实现远程文件传输的方法,并展示了如何实时传输数据并利用matplotlib库进行绘图展示。适用于初学者了解基本的网络通信原理及数据可视化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用TCP进行远程数据传输----文件传输, 数据实时传输并绘出

(初学者一枚~~还希望多多交流~)

First~~~~~文件传输

客户端:

from socket import *
import os


def main():
    tcp_socket = socket(AF_INET, SOCK_STREAM)
    tcp_ip = " " # 写服务器ip
    tcp_port = 4995  # 连接服务器
    tcp_socket.connect((tcp_ip, tcp_port))
    new_file = open('22222.xls', "wb")  # 创建一个空文件
    time = 0  # 用与计算读取的字节数
    while True:
        mes = tcp_socket.recv(4096)  # 接收服务器端返回的内容

        if mes:  # 如果内容不为空执行
            new_file.write(mes)  # 解码并向文件内写入
            time += len(mes)  # 计算字节
        else:  # 如果字节数为空即未收到内容
            if time == 0:
                new_file.close()  # 关闭文件
                os.remove('111.xls')   # 删除刚刚创建的文件
                print("没有您要下载的文件")
            else:
                print("文件下载成功")  # 如过time有值时name文件传输完成
            break
    tcp_socket.close()  # 关闭套接字


if __name__ == '__main__':
    main()

服务器端:

import socket


def file_deal(file_name):

    try:
        file_name='1.xls'
        files = open(file_name, "rb")
        mes = files.read()
    except:
        print("没有该文件")
    else:
        files.close()
    return mes


def main():
    IP = "  "
    port = 4995
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_socket.bind((IP, port))
    tcp_socket.listen(1)
    print('listen at port :', port)
    client_socket, addr = tcp_socket.accept()
    print('connected by', addr)
    while True:
        mes = file_deal('1.xls')
        if mes:
            client_socket.send(mes)
            client_socket.close()
            break


if __name__ == "__main__":
    main()

传输数据并实时显示, 可以应用与脑电肌电数据发送~~~maybe 我还没有尝试~

客户端:

import socket
import sys
import matplotlib.pyplot as plt
import xlrd
import struct


IP = "="
port = 45
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

workbook = xlrd.open_workbook('1.xlsx')  # 打开excel文件
sheet = workbook.sheet_by_name("1")  # 打开sheet1
row_list = []
row_num = sheet.nrows

try:
    client.connect((IP, port))

except Exception as e:
    print('server not find or not open')
    sys.exit()

trigger = input("send:")
client.sendall(trigger.encode())
if trigger:
    while True:
        for i in range(1, 1000):
            row_data = sheet.row_values(i)  # 获得第i行的数据

            for data in row_data:
                print(row_data)
                if data != '':
                    send = str(data)
                    client.sendall(send.encode())  # 再编码发送
                    send=','
                    client.sendall(send.encode())  # 再编码发送
        break
send = '1'
client.sendall(send.encode())
client.close()

服务器端:

uffer_size = 1024 ## 设置传输字节数 貌似我直接设置了~~
IP = "  " ## 这个地方填写服务器所在的ip
port = 45
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ## 创建套字节
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((IP, port))
s.listen(1) ## 开始监听 最多监听括号里的个数
print('listen at port :', port)
f_row_list=[]
conn, addr = s.accept() ## 接受客户的连接请求 并得到地址
print('connected by', addr)

data = conn.recv(1024)
data = data.decode()  # 解码


row_list = []
plt.close()  # clf() # 清图 cla() # 清坐标轴 close() # 关窗口
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
temp=''

if data:
    while True:
        data = conn.recv(100)  ## 一次接受多少bytes
        data = data.decode()
        data = temp + data  ## temp 由下面可以知道,是接受数据的最后一组。原因是,可能最后一个是‘-’或者 是‘’或者是0.09中的0.0 均有可能,如果是0.0 那么下次传过来的就是9 产生了突变。因此如果上一组的最后一个不是‘,’ 那么就直接将其添加到下一组中!!!!但是如果上一组结尾是‘,’,那么就没有必要再变化,直接将temp 置为空字符~~~~~~
        a = data.split(',')
        if a[-1] != ',':  ## 如果不是‘,’ 那么记录最后一组数据, 并把最后一组数组置为空字符
            temp = a[-1]
            a[-1] = ''
        else:
            temp = []   ## 否则(即最后一个为‘,’) 将temp 置为空 即 不需要改变
        for i in a:  ## 如果i不为空字符  没找到表示空字符的表示 null或者 ‘’都试过了
            if (i == '1'): ##  结合客户端进行看 让客户端结束后 发送1
                plt.pause(10000)
                break
            if i:
                if i !='-':
                    row_list.append(float(i))

        print(row_list)
        ax.plot(row_list, c='b')  # 绘制出来
        plt.pause(0.1)

plt.pause(100000)
s.close()
plt.savefig('test.png', dpi=200, bbox_inches='tight')
Python使用socket模块可以创建网络上的服务器和客户端,实现基本的数据交互。以下是一个简单的聊天室功能实现的示例: 服务器端代码示例: ```python import socket import threading def client_handler(connection, address): try: print(f"连接地址:{address}") while True: message = connection.recv(1024) if not message: break print(f"来自{address}的消息: {message.decode()}") connection.sendall("消息已收到".encode()) finally: connection.close() def main(): host = '127.0.0.1' # 本地主机地址 port = 12345 # 非特权端口号 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind((host, port)) server_socket.listen(5) print("服务器启动,等待连接...") try: while True: conn, addr = server_socket.accept() thread = threading.Thread(target=client_handler, args=(conn, addr)) thread.start() finally: server_socket.close() if __name__ == "__main__": main() ``` 客户端代码示例: ```python import socket def main(): host = '127.0.0.1' # 服务器地址 port = 12345 # 服务器监听的端口号 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect((host, port)) try: print("已连接到聊天服务器,输入消息后按回车发送。输入 'exit' 退出聊天。") while True: message = input(">> ") if message.lower() == 'exit': break client_socket.sendall(message.encode()) response = client_socket.recv(1024) print(f"服务器回复: {response.decode()}") finally: client_socket.close() if __name__ == "__main__": main() ``` 在上述代码中,服务器端创建了一个socket并监听指定的端口,接受客户端的连接请求。每当有新的连接时,服务器会为每个客户端创建一个新的线程来处理数据的接收和发送。 客户端连接到服务器后,用户可以输入消息并发送。服务器接收消息后,可以进行相应的处理,并将回复发送回客户端。 注意:这只是一个非常基础的聊天室功能实现,没有错误处理、加密、认证等功能,在实际应用中需要进行相应的增强。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值