3.7.0 3.6.0 3.5.0 3.4.0 3.3.0 3.2.2 3.2.1 3.2.0 Korean English Chinese Czech Dutch French German Hungarian Italian Japanese Polish Portuguese Spanish
3.7.0 3.6.0 3.5.0 3.4.0 3.3.0 3.2.2 3.2.1 3.2.0 Korean English Chinese Czech Dutch French German Hungarian Italian Japanese Polish Portuguese Spanish

통합 예제 - Tcp/Server

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

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

예제 1 : 기본 Tcp Server예제 

Python
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를 integer로 변환

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

Python
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에 byte형 send_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 : 재 접속

Python
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된 소켓을 닫는 것에 유의 바랍니다.