Skip to main content
Skip table of contents

통합 예제 - Tcp/Server

client는 제어기 IP = 192,168,137.100, port = 20002로 접속을 하고

수신한 패킷을 그대로 server 에게 전송하는 동작(mirroring)을 한다고 가정합니다.

예제 1 : 기본 Tcp Server예제 

PY
g_sock = server_socket_open(20002)
tp_popup("connect O.K!",DR_PM_MESSAGE)

while 1:
  server_socket_write(g_sock, b"abcd")  # byte형으로 스트링 “abcd” 전송
  wait(0.1)    
  res, rx_data = server_socket_read(g_sock) #server로부터 수신 대기
  tp_popup("res={0}, rx_data ={1}".format(res, rx_data), DR_PM_MESSAGE) 
  wait(0.1)

port = 20002를 열고 client가 접속할 때까지 기다립니다.

접속된 client에 접속하고 byte“abcd”를 전송합니다.

client로 부터 수신된 메시지를 TP에 출력합니다.

client는 수신된 데이터를 그대로 송신하므로 res = 4, rx_data=b”abcd” 가 됩니다.

예제 2 : 다양한 패킷 전송 예제

송신 패킷 : “MEAS_START" +data1[4byte]+data2[4byte]

           data1: integer를 4byte로 변환 ex) 1 → 00000001

           data2: integer를 4byte로 변환 ex) 2 → 00000002
ex) data1=1, data2=2 인 경우: “MEAS_START"+00000001+00000002        

                 실제 패킷: 4D4541535F53544152540000000100000002

수신 패킷 : res=18, rx_data=“MEAS_START"+00000001+00000002

         rxd1 추출 : 10~14번째 byte interger로 변환

         rxd2 추출 : 14~18번째 byte interger로 변환

PY
g_sock = server_socket_open(20002)
tp_popup("connect O.K!",DR_PM_MESSAGE)

send_data = b"MEAS_START"
data1 =1
data2 =2  
send_data += (data1).to_bytes(4, byteorder='big') 
send_data += (data2).to_bytes(4, byteorder='big') 
  
server_socket_write(g_sock, send_data)  
 
wait(0.1)    
 
res, rx_data = server_socket_read(g_sock)
tp_popup("res={0}, rx_data ={1}".format(res, rx_data), DR_PM_MESSAGE) 

rxd1 = int.from_bytes(rx_data[10:10+4], byteorder='big', signed=True)
rxd2 = int.from_bytes(rx_data[14:14+4], byteorder='big', signed=True)

tp_popup("res={0}, rxd1={1}, rxd2={2}".format(res, rxd1, rxd2), DR_PM_MESSAGE) 

server_socket_close(g_sock)

client에 bytesend_data를 전송합니다.

client는 수신된 데이터를 그대로 송신하므로 res = 18, rx_data send_data와 같은 패킷을 가집니다.

rxd1 추출 : 10~14번째 byte interger로 변환

rxd2 추출 : 14~18번째 byte interger로 변환

최종 결과는 res=18, rxd1=1, rxd2=2 가 됩니다.


예제 3 : 재 접속

PY
def fn_reopen():
  global g_sock
  server_socket_close(g_sock)
  g_sock = server_socket_open(20002)
  return   

g_sock = server_socket_open(20002)
tp_popup("connect O.K!",DR_PM_MESSAGE)

server_socket_write(g_sock, b"abcd")  
wait(0.1)    

while 1:   
  res, rx_data = server_socket_read(g_sock)
  if res < 0:
     fn_reopen()
  else:      
     tp_popup("res={0}, rx_data ={1}".format(res, rx_data), DR_PM_MESSAGE) 
  wait(0.1)

server_socket_read() 명령어의 리턴값을 체크합니다.

client 와 접속이 끊어지거나, 통신 문제가 발생하면 음수 값이 리턴됩니다.

음수값이 리턴된 경우 reopen() 함수를 호출하여 client 접속을 기다립니다.

재 접속 open , 기존에 open된 소켓을 닫는 것에 유의 바랍니다.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.