首页 > 解决方案 > 在 Python Socket 上通过 TCP 将 txt 文件发送到服务器

问题描述

我正在尝试.txt通过 TCP 将文件从客户端发送到服务器。服务器应该能够计算文本文件的单词和字符。

但是在将文本文件发送到服务器时出现错误:

 "CLIENT_SOCKET.sendto(str(FILENAME).encode(4096)), (SERVER_HOST, SERVER_PORT)
 TypeError: encode() argument 'encoding' must be str, not int"

我真的不明白错误是如何发生的。

import socket // This is the client 

SERVER_HOST = '127.0.0.1'
SERVER_PORT = 54321

CLIENT_SOCKET = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

CLIENT_SOCKET.connect((SERVER_HOST, SERVER_PORT))

FILENAME = input(str("What file would you like to upload?"))
f = open(FILENAME, "r")
FILE_DATA = f.read(4096)
f.close()

print(FILENAME)
CLIENT_SOCKET.sendto(str(FILENAME).encode(4096)), (SERVER_HOST, SERVER_PORT)

RECEIVED_WORDS, SERVER_HOST = CLIENT_SOCKET.recvfrom(4096)
RECEIVED_CHAR, SERVER_HOST = CLIENT_SOCKET.recvfrom(4096)

print(RECEIVED_WORDS.decode())
print(RECEIVED_CHAR.decode())


CLIENT_SOCKET.close()

标签: pythonsockets

解决方案


CLIENT_SOCKET.sendto(str(FILENAME).encode(4096)), (SERVER_HOST, SERVER_PORT)您将参数4096(整数)传递给encode需要字符串的方法时。

基于您发送文本的事实,我建议您使用 utf-8 编码,以下是如何执行此操作的示例:

CLIENT_SOCKET.sendto(str(FILENAME).encode('utf-8')), (SERVER_HOST, SERVER_PORT)

有关如何使用 python 字符串编码以及可以传递给的各种可能值的详细信息,请参见此处encode


推荐阅读