私はpythonが初めてで、tcp接続でソケットを使用してファイルを送信する方法を理解しようとするのが本当に難しいと感じています。別の質問でこのコードを見つけました。
クライアント側
def _sendFile(self, path):
sendfile = open(path, 'rb')
data = sendfile.read()
self._con.sendall(encode_length(len(data))) # Send the length as a fixed size message
self._con.sendall(data)
# Get Acknowledgement
self._con.recv(1) # Just 1 byte
サーバ側
def _recieveFile(self, path):
LENGTH_SIZE = 4 # length is a 4 byte int.
# Recieve the file from the client
writefile = open(path, 'wb')
length = decode_length(self.con.read(LENGTH_SIZE) # Read a fixed length integer, 2 or 4 bytes
while (length):
rec = self.con.recv(min(1024, length))
writefile.write(rec)
length -= sizeof(rec)
self.con.send(b'A') # single character A to prevent issues with buffering
今、私はこのコードで2つの問題を抱えています
self._con.sendall(encode_length(len(data)))
この行では、encode_length is undefined というエラーが表示されます
第二に、これらはファイルを送受信する関数ですどこでそれらを呼び出しますか最初にTCP接続を形成してからこれらの関数を呼び出しますそしてそれらを正確に呼び出す方法、それらを直接呼び出すと、クライアント側で_sendFile(self 、パス) は 2 つの引数を取ります (パスだけで自分自身を渡していないため)
第三に、OSライブラリの関数を使用して完全なパスを取得しているので、次のような関数を呼び出しています
_sendFile(os.path.abspath("file_1.txt"))
これは引数を渡す正しい方法ですか
申し訳ありませんが、この質問はかなり基本的で不自由ですが、オンラインのどこでも基本的に機能を取得できますが、それを呼び出す方法はわかりません
今、これは私が関数を呼び出す方法です
serverIP = '192.168.0.102'
serverPort = 21000
clientSocket = socket(AF_INET, SOCK_STREAM)
message = "Want to Backup a Directory"
clientSocket.connect((serverIP, serverPort))
_sendFile(os.path.abspath("file_1.txt"))
根本的に間違っているのはどれか
クライアントとサーバーの両方に同じコンピューターを使用しています
ターミナルを使用して Ubuntu で Python を実行する