2016-10-22 2 views
0

にTCPサーバに送信した後、私のpythonに新しいですし、私はそれらの間でファイルを送信できるようにするには、TCPサーバとクライアントmultithrededを作るしようとしています。私はこれら二つのプログラムのためのいくつかの簡単なコードを書きましたが、毎回私は、サーバーのサイト上で空のファイルを取得します。ファイルはフォルダ内に作成されますが、開いたときには空白です。私はまた、彼らは空になっていると言って、それらを開きませんphotoviewerファイルが、Windowsを.PNG送信しようとしました。私は空のファイルのpython

Client.pyを求めています理由ですので、私はこのような問題をencourting人を見つけることができませんでした

import socket # Import socket module 

HOST = "localhost" # Host address/name 
PORT = 2137 # Reserves port for the service 

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
client.connect((HOST, PORT)) 

fileToSend = open('test.txt', 'rb') 
print "File ready to be sent" 
l = fileToSend.read(1024) 

while l: 
    print "Sending the file" 
    client.send(l) 
    l = fileToSend.read(1024) 

fileToSend.close() print "done" 
client.close() 

Server.py

import socket 
from threading import Thread 
from SocketServer import ThreadingMixIn 

import sys 

TCPHOST = "localhost" 
TCPPORT = 2137 
BUFFER_SIZE = 20 


class ClientThread(Thread): 
    def __init__(self, HOST, PORT): 
     Thread.__init__(self) 
     self.HOST = HOST 
     self.PORT = PORT 
     print "New thread started for " + HOST + " on port " + str(PORT) 

    def run(self): 
     f = open('received.py', 'wb') 
     while True: 

       try: 

        data = conn.recv(1024) 

       except socket.error, e: 
        print "Error receiving data: %s" % e 
        sys.exit(1) 

       while data: 
        print "Receiving" 
        f.write(data) 
        data = conn.recv(1024) 
       f.close() 


try: 
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
    server.bind((TCPHOST, TCPPORT)) 
    print "Socket created" 
except socket.error, err: 
    print "Failed to create socket" % err 


threads = [] 

while True: 
    server.listen(4) 
    print "Waiting for connections" 
    (conn, (HOST, PORT)) = server.accept() 
    thread = ClientThread(HOST, PORT) 
    thread.start() 
    threads.append(thread) 

for t in threads: 
    t.join() 

答えて

0

私はわからない、実際に何を私はあなたがそれをすべて使用していない、しかし、あなたはSocketServerをインポートすることを確認するので、やってみたいです。

あなたは簡単なソケットサーバを実行しようとしている場合は、クラスClientThreadと、そのファイル内のスレッドに関するすべての他のものは必要ありません。

server.pyに次のコードを使用すると、ThreadingMixInを使用して、ねじTCPServerのを実装しようとしているならば、あなたはSocketServerをサブクラスクラスを作成し、そのをオーバーライドする必要が

import socket 

import sys 

TCPHOST = "localhost" 
TCPPORT = 2137 
BUFFER_SIZE = 20 

try: 
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
    server.bind((TCPHOST, TCPPORT)) 
    server.listen(4) 
    print "Socket created" 
except socket.error, err: 
    print "Failed to create socket" % err 

while True: 
     print "Waiting for connections" 
     (conn, (TCPHOST, TCPPORT)) = server.accept() 
     try: 

      while True: 
       data = conn.recv(1024) 
       f = open('received.py', 'wb') 
       if data: 
        print "Receiving " + data 
        f.write(data) 
       else: 
        f.close() 
        break; 


     except socket.error, e: 
      #pass 
      print "Error receiving data: %s" % e 
       #sys.exit(1) 

     finally: 
      conn.close() 

仕事をします()関数

Pythonドキュメントはこの https://docs.python.org/3.5/library/socketserver.html

に非常に便利であるハンドル(ThreadingMixinがありますページの一番下)

+0

T Iは、複数のクライアントが同時にそのサーバーに接続することを可能にするTCPサーバーを作成しようとしていますので、単純なサーバーは私のために少しuslessですが、私は、リンクと一緒に勉強しようとしますあなたが提供した – kalleye

関連する問題