UDP 연결을 통해 데이터를 전송하는 소프트웨어가 있습니다. 그러나 우리 시스템에서는 직렬 포트를 통해서만 데이터를 전송할 수 있습니다. 나는 UDP를 사용하여 serial과 serial 사이에 브리지를 만들려고 생각하고 있습니다 socat
. 그러나 나는 그것에 대해별로 익숙하지 않습니다. 몇 가지 튜토리얼을 시도했지만 도움이 되지 않았습니다. 또한 설명서를 읽어보았지만 그것도 도움이 되지 않았습니다.
내가 하나 찾았어여기 예, 내 필요에 맞게 조정했습니다. 내 임베디드 시스템에 있는 내용은 다음과 같습니다(고정 IP가 있음).
$ socat -v udp4-datagram:172.24.176.207:54321 \
open:/dev/ttyS0,raw,nonblock,waitlock=/tmp/s0.locak,echo=0,b115200,crnl
내 호스트에 있는 내용은 다음과 같습니다(고정 IP도 있음).
$ socat -v udp4-datagram:172.24.176.116:54321 \
open:/dev/ttyUSB0,raw,nonblock,waitlock=/tmp/s0.locak,echo=0,b115200,crnl
저를 용서하셔야 합니다. 하지만 저는 대체로 socat
문맹 입니다 networking
.
몇 가지 의견과 질문.
- 무슨 뜻이에요
open:/dev/ttyUSB0,raw,nonblock,waitlock=/tmp/s0.locak,echo=0,b115200,crnl
? 해당 설명은 어디서 찾을 수 있나요? 나는/dev/ttyUSB0
및 를 얻었b115200
지만 남은 것은 무엇입니까? 임베디드 시스템(172.24.176.207)에서
netcat
서버를 실행합니다.$ nc -ul 172.24.176.207 54321
호스트에서 UDP 패킷을 보냈습니다.
$ echo -n "hello" | nc -4u -w1 172.24.176.207 54321
그러나 아무 일도 일어나지 않았습니다. 내가 무엇을 놓치고 있나요?
답변1
에코 서버 설정
한때 socat
다음과 같이 UDP 에코 서버를 설정했습니다.
$ socat UDP4-LISTEN:54321,fork EXEC:cat
에코 클라이언트
$ echo -n "hello" | nc -4u -w1 192.168.56.101 54321
hello
TCP 덤프 프롬프트
저는 이 프로그램을 디버깅할 때 네트워크를 모니터링하는 것을 좋아하므로 이 프로그램을 실행하여 "에코 서버"를 모니터링하겠습니다.
$ tcpdump -i any -vnn port 54321
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
22:33:21.280053 IP (tos 0x0, ttl 64, id 8684, offset 0, flags [none], proto UDP (17), length 33)
192.168.56.1.62439 > 192.168.56.101.54321: UDP, length 5
22:33:21.282140 IP (tos 0x0, ttl 64, id 40761, offset 0, flags [DF], proto UDP (17), length 33)
192.168.56.101.54321 > 192.168.56.1.62439: UDP, length 5
노트:위의 기술은 socat/nc 서버와 해당 클라이언트 사이에서 발생하는 모든 것을 디버깅하기 위해 크게 수정될 수 있습니다.
socat 인수 이해
구성도 찾았어요socat
탈진한때때로. 하지만 다른 모든 것과 마찬가지로 작은 부분으로 나누면 익히기가 더 쉽습니다.
$ socat -v udp4-datagram:172.24.176.116:54321 \
open:/dev/ttyUSB0,raw,nonblock,waitlock=/tmp/s0.locak,echo=0,b115200,crnl
따라서 처음 두 스위치는 다소 명확해야 합니다.
-v
- 장황한udp4-datagram:172.24.176.207:54321
- UDP 수신 포트 54321open:/dev/ttyUSB0
- USB #0 장치로의 입력/출력 전송 설정raw
- 원시 모드, 처리되지 않은 입력/출력 전달nonblock
- 비차단 모드에서 파일 열기/사용waitlock=/tmp/s0.locak
- 대기 잠금 파일 생성 -socat
다중 방지echo=0
- 서버에서 로컬 에코를 비활성화합니다.b115200
- 전송 속도를 115,200비트로 설정crnl
- 개행 문자를\n
다음에서 변환합니다.\r\n
그런데 매뉴얼 페이지를 보면 socat
많은 예제가 있습니다. 위의 스위치에 대한 자세한 설명도 있습니다.