2016-10-11 7 views
0

私はLANネットワークを介してPythonでTCP経由で基本メッセージを送信しようとしています。 TCPClient.py:長いメッセージのあるPython TCP socket.error

import socket, sys, time 

TCP_IP = "10.0.0.10" 
TCP_PORT = 5005 
BUFFER_SIZE = 1024 
running = True 

while running == True: 
    try: 
     MESSAGE = raw_input("Message: ") 
     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
     print("Connecting...") 
     s.connect((TCP_IP,TCP_PORT)) 
     print("Connected!") 
     s.send(MESSAGE) 
     data = s.recv(BUFFER_SIZE) 
     s.close() 

     print("Sent data: %s" % MESSAGE) 
     print("Recieved data: %s" % data) 
     running = False 
     time.sleep(20) 
    except socket.error as e: 
     print(e) 
     time.sleep(1) 
    except: 
     print(sys.exc_info()[0]) 
     time.sleep(1) 

そしてTCPServer.py:それは主に( "世界ハロー" のような)小さなメッセージのために動作しますが、私はもっと〜10文字を超えるメッセージを送信するとき、それは分割

import socket, time, sys 

TCP_IP = "10.0.0.10" 
TCP_PORT = 5005 
BUFFER_SIZE = 20 

while True: 
    try: 
     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
     s.bind((TCP_IP,TCP_PORT)) 
     print("Listening for connection...") 
     s.listen(1) 

     conn,addr = s.accept() 
     while 1: 
      data = conn.recv(BUFFER_SIZE) 
      if not data: break 
      print("Recieved data: %s" % data) 
      conn.send(data.upper()) 
      print("Sent data: %s" % data.upper()) 
     conn.close() 
    except TypeError as e: 
     print(e) 
    except ValueError as e: 
     print(e) 
    except socket.error as e: 
     print(e) 
    except: 
     print(sys.exc_info()[0]) 
     time.sleep(1) 

それは2つのセクションに分かれていて、時には半分も送信しません。例えば:高度で任意の助け

running both scripts

ありがとう!とても有難い。ここで

+0

TCPは_streamプロトコルです。ストリームが特定のメッセージチャンクを提供するとは思わない。 –

答えて

0

は何が起こったのです。

  1. あなたのクライアントは、サーバーは、サーバーが(データを送り返すという長い行の20文字(つまり、サーバー側で、あなたのバッファのサイズです)
  2. を得た
  3. 長いラインを送りましたクライアントへの文字数は20文字です)
  4. クライアントにデータがあり、サーバーから切断されたため、サーバーで例外が発生します。
+0

ありがとうございました。 :) –

関連する問題