2016-10-22 2 views
0

나는 파이썬에 익숙하지 않다. 그리고 그들 사이에 파일을 보낼 수 있도록 멀티 쓰레드 tcp 서버와 클라이언트를 만들려고 노력 중이다. 이 두 프로그램에 대한 간단한 코드를 작성했지만 서버의 사이트에 빈 파일이 생길 때마다 작성했습니다. 파일은 폴더에 생성되지만 열 때 내부에 비어 있습니다. 또한 .png 파일을 보내려고했으나 Windows 포토 뷰어가 비어 있음을 열지 않습니다. 내가비어있는 파일을 파이썬의 tcp 서버로 보낸 후

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 클래스와 해당 파일의 스레드에 대한 다른 모든 요소는 필요하지 않습니다.

당신이 다음 SocketServer을 서브 클래스 클래스를 생성하고 무시하는 데 필요한 ThreadingMixIn를 사용하여 스레드 tcpserver를 구현하려는 경우가

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() 

그러나 일을 할 것입니다 server.py에서 다음 코드는 처리()

파이썬 문서는이 https://docs.python.org/3.5/library/socketserver.html

(ThreadingMixin은이다에 매우 도움이된다 기능 t 페이지 하단)

+0

여러 클라이언트가 동시에 해당 서버에 연결할 수 있도록 TCP 서버를 만들려고합니다. 따라서 간단한 서버가 나를 위해 조금 쓸모가 없지만 링크를 사용하여 학습해볼 것입니다. 당신이 제공 한 – kalleye

관련 문제