2016-08-13 12 views
0

私はTCP接続でいくつかのテスト装置を制御しようとしています。この機器には、TCPを介して制御できるソフトウェアが付属しています。基本的には、クライアントコンピュータのIPアドレスとポートを入力することができます。また、そのポートに開いているリスニングセッションがいつあるかを示すインジケータライトもあります(これはすべて機器ソフトウェアインターフェイス上にあります)基本的なTCP接続

私はテストしましたこれはSocketTest3(フリーソフトウェア)を使用し、リスニングセッションを開始したり、別のコンピュータからコマンドを送信したりすることができます。さて、私はPythonで機器を制御したいと思います。私は、ローカルIPアドレスを使用して、テスト機器と同じマシン上でサーバとクライアントのコードを実行しています。単にコードを実行すると(機器ソフトウェアを閉じた状態で)、送信したメッセージを送信、受信、印刷することができます。機器ソフトウェアを開いているとき(制御に必要)、私はリスニングセッションを開始することができます(機器のソフトウェアにはインジケータが点灯します)が、コマンドを送信すると何も起こりません(エラーも受信もありません)。また、メッセージは印刷するためにクライアントに返送されません。

アイデア?それはおそらく私が行方不明になっている非常に単純なものです。

Serverコード:

import sys 
import socket 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
TCP_IP = '127.0.0.1' 
TCP_PORT = 8001 
s.bind((TCP_IP, TCP_PORT)) 
s.listen(5) 

connection, client_address = s.accept() 
BUFFER_SIZE = 20 
print 'Address: ', client_address 

while 1: 
    print "receiving..." 
    data = connection.recv(BUFFER_SIZE) 
    print data 
    if not data: break 
    print "received data:", data 
    connection.send(data) # echo 
connection.close() 

クライアントコード:camerausbのコードから欠落しているか疑問に思う方のため

import socket 

TCP_IP = '127.0.0.1' 
TCP_PORT = 8001 
BUFFER_SIZE = 1024 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((TCP_IP, TCP_PORT)) 

print "sending message..." 
s.sendall('ST<CR>') # Send command 
print "receiving message..." 
data = s.recv(BUFFER_SIZE) 
s.close() 
print "received data:", data 
+0

サーバーに送信されたデータはどのように装置インターフェイスに送られますか? – sberry

+0

'127.0.0.1'をループで' 0.0.0.0' –

+0

'Accept'に置き換えてください。さもなければ、一度だけ実行してください。 ***同じポートを2回使用することはできません!** – dsgdfg

答えて

0

、私は彼がいなかったので、彼はクライアントのprint文から何かを見ていなかったと思いますrepr()を使用してデータをフォーマットします。私も同様の問題がありましたが、これは私のために働いていました。

print 'Received', repr(data) 
関連する問題