スレッド化によって複数のポイントからソース コンピューター (クライアント) のファイルを読み取り、チャンクを宛先 (サーバー) に送信しようとしています。クライアント プログラムを終了しましたが、サーバー側で 3 つの問題があります。何度か送信に失敗しました。コードを完成させるのを手伝ってもらえますか? これは私のクライアントコードです:
import socket
import Queue
import threading
import filechunkio,os.path
class VRCThread(threading.Thread):
"""Mostafa.Hadi"""
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue
def Upload(self):
file = self.queue.get()
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('172.32.60.45', 9999))
chunk =filechunkio.FileChunkIO('piano.zip', offset=int(file)*8024, bytes=8024)
k1=chunk.read()
k1=k1[0:8024]+"piano.zip."+file
sock.sendall(k1)
sock.close()
except Exception:
print file+" UnSuccessful upload."
else:
print file+" Successful upload."
def run(self):
while True:
self.Upload()
def main():
queue = Queue.Queue()
print "Connected to server"
for i in range(8):
t = VRCThread(queue)
t.setDaemon(True)
t.start()
siz=os.path.getsize("piano.zip")
num=siz/8024
print num
print siz
for file in range(num):
queue.put(str(file))
print file
queue.join()
if __name__=="__main__":
main()
サーバー側のコード:
import SocketServer
import threading
import Queue
class MyServerThread(threading.Thread):
def __init__(self, channel, details):
self.channel = channel
self.details = details
threading.Thread.__init__(self)
def run(self):
print 'Received connection:', self.details[0]
self.k= self.channel.recv(8040)
self.channel.close()
namef=self.k[8024:]
v=open(namef,"wb")
v.write(self.k)
v.close
print 'Closed connection:', self.details[0]
class MyThreadedSocketServerHandler(SocketServer.BaseRequestHandler):
def handle(self):
thread1 = MyServerThread(self.request, self.client_address)
thread1.start()
thread1.join()
if __name__ == '__main__':
server = SocketServer.TCPServer(('172.32.60.45', 9999), MyThreadedSocketServerHandler)
server.serve_forever()