1

Pythonのソケット通信を介してLantronixEDS2100モジュールを使用して、ネットワーク経由でADAM-4017 + I/Oモジュールへの接続を確立しようとしています。私の一生の間、私はそれを機能させることができません。

EDSには、adamユニットが接続されているIPアドレスとポート(10001)があります。アダムにch1の値を照会しようとしています(asciiコマンドは#000です)

どんな助けでも大歓迎です:

import socket
edsIP = "192.168.1.135"
edsPORT = 10001
MESSAGE="#000\r"


srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM)
srvsock.bind( ('',23000))
srvsock.listen(1)
newsock, (remhost, remport) = srvsock.accept()
srvsock.send((MESSAGE),(edsIP, EdsPORT) )



 while 1:


    data, addr = srvsock.recv(4096) 
    print ("received message:", data,addr)
    srvsock.close()
4

2 に答える 2

1

このデバイスについて具体的には何も知りませんが、あなたの説明から、ポート10001での接続を期待しているとおっしゃいました。しかし、コードで行っているのは、独自のソケットを開き、ポート23000での接続をリッスンしてから、待機することです。接続用。あなたがあなたに接続する何かを期待していないなら、あなたは理由もなくただ待っているでしょう。

デバイスに必要なのが接続してメッセージを送信することだけである場合、これでうまくいくと思います。

import socket

edsIP = "192.168.1.135"
edsPORT = 10001
MESSAGE="#000\r"

srvsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
srvsock.settimeout(3) # 3 second timeout on commands
srvsock.connect((edsIP, edsPORT)))
srvsock.sendall(MESSAGE)

data = srvsock.recv(4096) 
print "received message:", data

srvsock.close()

アップデート

あなたのコメントはあなたがpython3を使用しているかもしれないことを示唆しています。その場合、次のようにコードを調整する必要があります。

MESSAGE=b'#000\r'

そして、あなたがあなたの応答を受け取ったとき、あなたがbytesそれを文字列に変えたいならば:

print data.decode("UTF-8")
于 2012-08-28T21:48:47.173 に答える
0

私が直接見ることができる唯一の問題は、whileステートメントを1つのスペースでインデントしたことですが、それはおそらくここで切り取って貼り付けることによるものです。

いくつかのテストの後、サーバーソケットで受け入れようとするとブロックされるのは明らかなので、デバイスに何も送信しません。

于 2012-08-28T21:43:39.987 に答える