통합 예제 (Tcp/Client)
server IP = 192.168.137,200, open port =20002 이고,
수신한 패킷을 그대로 client 에게 전송하는 동작(mirroring)을 한다고 가정합니다
예제 1 : 기본 Tcp Client 예제
# server IP = 192.168.137,200, open port =20002 로 가정
g_sock = client_socket_open("192.168.137.200", 20002)
tp_popup("connect O.K!",DR_PM_MESSAGE)
while 1:
client_socket_write(g_sock, b"abcd") # byte형으로 스트링 “abcd” 전송
wait(0.1)
res, rx_data = client_socket_read(g_sock) #server로부터 수신 대기
tp_popup("res={0}, rx_data ={1}".format(res, rx_data), DR_PM_MESSAGE)
wait(0.1)
server 에 접속하고 string “abcd”를 전송합니다. (b는 string을 byte형으로 변환합니다.)
server로 부터 수신된 메시지를 TP에 출력합니다.
server는 수신된 데이터를 그대로 송신하므로 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로 변환
g_sock = client_socket_open("192.168.137.100", 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')
client_socket_write(g_sock, send_data)
wait(0.1)
res, rx_data = client_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)
client_socket_close(g_sock)
server에 접속하고 byte형 send_data를 전송합니다.
server는 수신된 데이터를 그대로 송신하므로 res = 18, rx_data는 send_data와 같은 패킷을 가집니다.
- rxd1 추출 : 10~14번째 byte를 interger로 변환
- rxd2 추출 : 14~18번째 byte를 interger로 변환
최종 결과는 res=18, rxd1=1, rxd2=2 가 됩니다.
예제 3 : 재 접속
def fn_reconnect():
global g_sock
client_socket_close(g_sock)
g_sock = client_socket_open("192.168.137.200", 20002)
return
g_sock = client_socket_open("192.168.137.200", 20002)
tp_popup("connect O.K!",DR_PM_MESSAGE)
client_socket_write(g_sock, b"abcd")
wait(0.1)
while 1:
res, rx_data = client_socket_read(g_sock)
if res < 0:
fn_reconnect()
else:
tp_popup("res={0}, rx_data ={1}".format(res, rx_data), DR_PM_MESSAGE)
wait(0.1)
client_socket_read() 명령어의 리턴값을 체크합니다.
server와 접속이 끊어지거나, 통신 문제가 발생하면 음수 값이 리턴됩니다.
음수값이 리턴된 경우 reconnect() 함수를 호출하여 재접속을 시도합니다.
재 접속 시도 시, 기존에 open된 소켓을 닫는 것에 유의 바랍니다.