私は、ソケットを介してファイルを送信して転送をタイミングすることで、アップロード速度とダウンロード速度を測定するネットワーククラスのプログラムを作成しました。私が抱えている問題は、サーバとクライアントが同じマシンで動作しているときにうまく話すことができるということですが、ネットワーク上の別のマシンにサーバプログラムを置くとすぐにファイル転送は行われません。彼らはお互いに話します(クライアントは「サーバに接続」と言い、サーバは「xxx.xxx.xxx.xxxからの接続」と言います)が、ファイル転送のサイズと速度は0と0で示されます。ネットワーク上のPythonサーバーとクライアントの関係
ここにサーバーコード:
import util
import socket
import os
import shutil
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = ""
port = 12345
f = open("receivedfromclient.txt", "r+")
print "Waiting for clients..."
s.bind((host, port))
s.listen(5)
c, addr = s.accept()
print "Client connected:", addr
start = time.clock()
msg = c.recv(257024)
stop = time.clock()
duration = stop-start
f.write(str(msg))
b = os.path.getsize("receivedfromclient.txt")
print "File size = ", b, "bits"
print "Time to transfer from client = ", duration, " seconds"
bw = (b/duration)/1048576
print "The upload bit rate is ", bw, "Mpbs"
f.close()
shutil.copy("receivedfromclient.txt", "sendtoclient.txt")
f.open("sendtoclient.txt")
c.send(f.read())
f.close()
c.close()
s.close()
とクライアントコードは似ています
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = raw_input("Please enter host address: ")#socket.gethostname()
port = 12345
sendfile = raw_input("Please enter name of file to transfer: ")
f = open(sendfile,"rb")
g = open("receivedfromserver.txt","w")
print "Connecting to ", host, port
s.connect((host, port))
s.send(f.read())
のように。誰でも私がここで間違っていることを教えてもらえますか?
主要な1が、あなたが本当に何をしたいのか明確ではないという私見です: -
まず、 's.accept'は' s.accept() 'になります。 – Marcin
これは実行しているコードとまったく同じですか? 's.accept'は' s.accept() 'でなければなりません。 'b.os.path.getsize'は' b = os.path.getsize'でなければなりません – MattH
いいえ、いくつかのタイプミスが修正されました。私はs.accept()とb = os.path.getsizeを行った。申し訳ありません。 – crypto