0

スレッド化によって複数のポイントからソース コンピューター (クライアント) のファイルを読み取り、チャンクを宛先 (サーバー) に送信しようとしています。クライアント プログラムを終了しましたが、サーバー側で 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()
4

1 に答える 1

0

Python でのスレッド化はちょっと面倒です。グローバル インタープリター ロックのため、一度に実行できるスレッドは 1 つだけです。

http://docs.python.org/glossary.html#term-global-interpreter-lock

これをチェックしてください: http://docs.python.org/library/multiprocessing.html

実際の質問に関しては、誰かがあなたのためにプログラムを完成させると、その楽しさが完全になくなります。さらに、それは宿題の不正行為のにおいがするだけです。

于 2012-06-09T05:33:41.120 に答える