2012-08-28 4 views
1

Python에서 소켓 통신을 통해 Lantronix EDS2100 모듈을 사용하여 네트워크를 통해 ADAM-4017 + I/O 모듈에 연결하려고합니다. 나에게있어서 나는 그것을 작동시킬 수 없다.python 소켓 ascii 명령을 보내고 응답을받습니다.

EDS에는 adam 장치가 연결된 IP 주소와 포트 (10001)가 있습니다. 나는 채널 1의 값에 대한 아담를 쿼리 (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() 
+0

가 있어야 워크 플로우가 그렇다면, 당신은이 같은 코드를 조정해야 할 수도 있습니다 연결하는 것과는 반대로 장치에서 연결을 수신하는 것입니까? 내가보기에, 당신은 항구를 구속하고 연결을 기다린다. – jdi

+0

워크 플로우는 다음과 같습니다. ascii 명령을 보내고 응답을받습니다. – user1631534

답변

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를 사용하고있을 수 있습니다 제안 . 당신이 당신의 bytes 응답을받을 때 문자열로 돌려하려는 경우,

MESSAGE=b'#000\r' 

그리고 :

print data.decode("UTF-8") 
+0

인쇄를 둘러싼 괄호를 추가하고 연결선에서 여분의 괄호를 제거해 보았습니다. 반환 값 : srvsock.send (MESSAGE) TypeError : 'str'은 버퍼 인터페이스를 지원하지 않습니다. – user1631534

+0

fyi 저는 NOOB 파이썬 프로그래머입니다 – user1631534

+0

어떤 파이썬 버전을 사용하고 있습니까? – jdi

0

내가 직접 볼 수있는 유일한 문제는 당신이 잠시 들여 쓰기 한 것입니다 하나의 공백이 있지만 여기에서 잘라내어 붙여 넣기 만하면됩니다.

몇 가지 테스트를 마치면 serversocket을 수락하려고하면 차단되므로 장치에 아무 것도 보내지 않을 것임을 분명히합니다.