在python中使用TCP将图像文件从客户端发送到服务器的程序
这是我的密码。目前,它传输大约75%的图像文件(在底部裁剪)。我想把它作为一个整体转移。我就是这样做的:在python中使用TCP将图像文件从客户端发送到服务器的程序,python,sockets,Python,Sockets,这是我的密码。目前,它传输大约75%的图像文件(在底部裁剪)。我想把它作为一个整体转移。我就是这样做的: 在服务器pc中创建名为“服务器”的文件夹 在客户端pc中创建名为“客户端”的文件夹 还包括要传输到同一“客户端”文件夹中的图像文件 客户端询问“要发送的文件名”,我在文件夹中键入图像文件的名称 无论哪一方问我“您想要接收的文件名”,我都会随意输入名称 文件传输并保存到服务器PC中的“服务器”文件夹中 client.py from socket import * def establish_
client.py
from socket import *
def establish_connection(server_IP, server_port):
client_socket = socket(AF_INET, SOCK_STREAM)
client_socket.connect((server_IP, server_port))
return client_socket
def send_recv_message(client_socket, message, buffer_size):
file = open(filename,'rb')
file_data = file.read(buffer_size)
client_socket.send(file_data)
text=print("File transfered")
return text
server_IP = input("Please, enter server IP address: ")
server_port = input("Please, enter server TCP connection port number: ")
client_socket = establish_connection(server_IP, int(server_port))
print("Connection established\n")
filename= input(str("enter filename"))
received_message = send_recv_message(client_socket,filename,1048576)
from socket import *
def create_socket(server_port):
server_socket = socket(AF_INET, SOCK_STREAM)
server_socket.bind(('', server_port))
server_socket.listen(1)
return server_socket
def recv_message(server_socket, buffer_size):
file = open(filename, 'wb')
connection_socket, address = server_socket.accept()
file_data= connection_socket.recv(buffer_size)
file.write(file_data)
file.close()
text=("file recieved")
return text
server_port = input("Please, enter TCP connection port number: ")
server_socket = create_socket(int(server_port))
while (True):
filename=input(str("enter filename for the incoming file:"))
incoming_message = recv_message(server_socket, 1048576)
print ("{}" .format(incoming_message))
server.py
from socket import *
def establish_connection(server_IP, server_port):
client_socket = socket(AF_INET, SOCK_STREAM)
client_socket.connect((server_IP, server_port))
return client_socket
def send_recv_message(client_socket, message, buffer_size):
file = open(filename,'rb')
file_data = file.read(buffer_size)
client_socket.send(file_data)
text=print("File transfered")
return text
server_IP = input("Please, enter server IP address: ")
server_port = input("Please, enter server TCP connection port number: ")
client_socket = establish_connection(server_IP, int(server_port))
print("Connection established\n")
filename= input(str("enter filename"))
received_message = send_recv_message(client_socket,filename,1048576)
from socket import *
def create_socket(server_port):
server_socket = socket(AF_INET, SOCK_STREAM)
server_socket.bind(('', server_port))
server_socket.listen(1)
return server_socket
def recv_message(server_socket, buffer_size):
file = open(filename, 'wb')
connection_socket, address = server_socket.accept()
file_data= connection_socket.recv(buffer_size)
file.write(file_data)
file.close()
text=("file recieved")
return text
server_port = input("Please, enter TCP connection port number: ")
server_socket = create_socket(int(server_port))
while (True):
filename=input(str("enter filename for the incoming file:"))
incoming_message = recv_message(server_socket, 1048576)
print ("{}" .format(incoming_message))
send
可能不会发送整个缓冲区。您需要改用sendall
recv
可能无法接收所有可用数据。您需要在一个循环中调用recv
,直到连接关闭。这是因为图片大于缓冲区大小。
您必须将pic表单客户端的大小发送到服务器。文本发送示例可用于将图像发送到
如
mess=f'{len(send_message)}'.ljust(buffer_size)+send_message
soc.send(mess.encode())
在服务器端找到图片的大小,当大小不等于收到的消息时,继续添加消息
message = ''
mes_len = 0
new_msg = True
print('got the connection: {}'.format(self.request))
while True:
data = self.request.recv(buffer_size)
if new_msg:
mes_len = int(data.decode())
new_msg = False
message += data.decode()
嗯,您只需调用一次
file\u data=file.read(buffer\u size)
。如果文件大小大于缓冲区,会发生什么情况?