使用python发送和接收文件的Tcp套接字

2024-10-01 00:21:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用简单的服务器端和服务器端发送tcp文件。因为从服务器获取文件不是问题,服务器创建一个同名的文件并将数据放入该文件中,但当涉及到将文件放入服务器时,有时它工作得很好,但总是有机会这样做,因此大多数情况下,服务器会获取文件名和文件内容,而不是将其写入文件,它将文件名和内容都作为新文件名写入,而该文件仍为空。如果有人能提出任何解决方案,那将是很大的帮助。在

服务器.py

import socket
import sys
HOST = 'localhost'
PORT = 3820

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind((HOST, PORT))

socket.listen(1)
while (1):
    conn, addr = socket.accept()
    print 'New client connected ..'
    reqCommand = conn.recv(1024)
    print 'Client> %s' %(reqCommand)
    if (reqCommand == 'quit'):
        break
    #elif (reqCommand == lls):
        #list file in server directory
    else:
        string = reqCommand.split(' ', 1)   #in case of 'put' and 'get' method
        reqFile = string[1]

        if (string[0] == 'put'):
            with open(reqFile, 'wb') as file_to_write:
                data=conn.recv(1024)
                while True:
                    if not data:
                        break
                    else:
                        file_to_write.write(data)
                        data=conn.recv(1024)
                    file_to_write.close()
                    break
            print 'Receive Successful'
        elif (string[0] == 'get'):
            with open(reqFile, 'rb') as file_to_send:
                for data in file_to_send:
                    conn.sendall(data)
            print 'Send Successful'
    conn.close()

socket.close()

客户端.py

^{pr2}$

Tags: 文件to服务器datastringif文件名socket
1条回答
网友
1楼 · 发布于 2024-10-01 00:21:00

TCP是一种流式协议,因此必须在协议中设计消息中断。例如:

s.send('put filename')
s.send('data')

可接收为:

^{pr2}$

所以缓冲接收到的数据,只提取完整的消息。一种方法是在消息之前发送消息的大小。在

相关问题 更多 >