python构建socket服务端接收数据并实现ftp传输

python构建socket服务端接收数据并实现ftp传输

  • 需求分析
    • 1.接收设备通过tcp/ip协议传输来的数据,并筛选处理
    • 2.将处理后的数据保存在以时间命名的txt文件中
    • 3.将文件发送到远程ftp服务器
  • 代码
      • 方法封装
      • 主运行文件

需求分析

1.接收设备通过tcp/ip协议传输来的数据,并筛选处理

5:02:09 PM 收到数据:XCDEV 20010401:Data:0,0,0,0,0,0,
5:02:19 PM 收到数据:XCDEV 20010401:Info:HB-850
5:03:09 PM 收到数据:XCDEV 20010401:Data:0,0,0,0,0,0,
5:03:59 PM 收到数据:XCDEV 20010401:Info:HB-950
5:04:09 PM 收到数据:XCDEV 20010401:Data:0,0,0,0,0,0,
5:04:49 PM 收到数据:XCDEV 20010401:Info:HB-1000
5:05:09 PM 收到数据:XCDEV 20010401:Data:0,0,0,0,0,0,
5:05:39 PM 收到数据:XCDEV 20010401:Info:HB-1050
5:06:09 PM 收到数据:XCDEV 20010401:Data:0,0,0,0,0,0,
5:06:29 PM 收到数据:XCDEV 20010401:Info:HB-1100
5:07:09 PM 收到数据:XCDEV 20010401:Data:0,0,0,0,0,0,
5:07:19 PM 收到数据:XCDEV 20010401:Info:HB-1150
5:08:09 PM 收到数据:XCDEV 20010401:Data:0,0,0,0,0,0,

2.将处理后的数据保存在以时间命名的txt文件中

txt命名:20200114163052.txt
数据传输时间

3.将文件发送到远程ftp服务器

代码

方法封装

#coding=utf-8
#引入套接字
import socket
import re
import os
import time
from ftplib import FTP
#client
try:
	#服务端不用
    def tcpSend():
        #创建套接字
        tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        # 绑定端口,发送数据时会从绑定的端口发送,不会再生成随机端口
        tcp_socket.bind(("", 8001))
        #连接服务器
        tcp_socket.connect(("ip",8000))#变量为元组
        # while True:
        #数据传输
        send_data=input("请输入传输的数据")
        tcp_socket.send(send_data.encode("utf-8"))
        #关闭套接字
        tcp_socket.close()
        #server端
        #tcp与udp不同,tcp必须先运行服务器客户端才能连接

    def tcpRecv():
        # 创建套接字
        tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 绑定端口,接收数据时会从绑定的端口发送,不会再生成随机端口
        tcp_socket.bind(("192.168.166.191", 1357))
        #listen设置最大允许连接数量
        tcp_socket.listen(128)
        # 为多个客户端服务while True:
        #连接处理(已完成三次握手)并且获取资源对象,conn请求对象,addr客户端地址
        client_scoket , client_addr = tcp_socket.accept()
        #print(client_addr)

        # 为一个客户端服务多次while True:
        while True:
        #请求处理,读取客户端发送过来的数据,设置每次读取1024字节,当过长时可以循环读取
          recv_data=client_scoket.recv(1024)
          #将字符格式转化为字符串格式,进行后续分割
          str_recv_data= str(recv_data,encoding='utf-8')
          #判断socket数据是否含有虫量
          if "Data" in str_recv_data :
            #正则表达式取出虫量
            recv_bug = re.findall(r':.+:(.+)',str_recv_data)
            recv_bug = recv_bug[0].strip()
            print(recv_bug)
            # 创建一个txt文件,文件名为mytxtfile,并向该文件文件写入msg

            #获取当前系统时间,拼接
            def get_time():
                dataTime = time.strftime("%Y%m%d%H%M%S", time.localtime())
                return dataTime
            #创建text文件
            def text_create(name, msg):
                desktop_path = "E:\\projectDoc\\200114RaspberryPi\\"  # 新创建的txt文件的存放路径
                full_path = desktop_path + name + '.txt'  # 也可以创建一个.doc的word文档
                file = open(full_path, 'w')
                file.write(msg)   #msg也就是下面的Hello world!
                file.close()
                return full_path
            #本地创建文件名格式20200114163052
            a = text_create(get_time(), recv_bug)
            print(a)

            #链接ftp
            def ftp_connect(host, username, password):
                ftp = FTP()
                # ftp.set_debuglevel(2)
                ftp.connect(host, 21)  # 连接ftp
                ftp.login(username, password)
                return ftp
            """
            从本地上传文件到ftp
            """
            def upload_file(ftp, remotepath, localpath):
                bufsize = 1024
                fp = open(localpath, 'rb')

                ftp.storbinary('STOR ' + remotepath, fp, bufsize)
                ftp.set_debuglevel(0)
                fp.close()
            #实例化ftp链接
            ftp = ftp_connect("192.168.166.227", "Administrator", "jn6158Bgxq")
            #上传本地指定路径文件到远程指定路径
            #upload_file(ftp, r"123.txt", "E:\\projectDoc\\200114RaspberryPi\\2020115122724.txt")
            newremote_path="dev20201\\counter\\"+get_time()+'.txt'
            upload_file(ftp, newremote_path, a)

            ftp.quit()
            print("upload successful")
            #上传后删除本地存储
            # os.remove(a)

except OSError:
    #客户端不需要服务.recv解堵塞,两种情况,客户端发送数据或客户端调用close。 if recv_data:发送了数据 else 关闭break
    #client_scoket.send("hahahahha recv ok".encode("utf-8"))
    # 关闭客户端连接
    # 关闭套接字
    client_scoket.close()
    tcp_socket.close()

'''
if __name__ == '__main__':
    #tcpSend()
    tcpRecv()
'''

主运行文件

#coding=utf-8
#引入套接字
from xcpzbbjs import tcpRecv

if __name__ == '__main__':
    #tcpSend()
    tcpRecv()	


你可能感兴趣的:(python,socket,linux,python)