내가 읽은 바에 따르면(개요일 뿐이고 C는 모릅니다) 특정 순서로 함수를 호출하여 서버와 클라이언트 사이에 소켓 세션이 설정됩니다.
It starts with the Server:
socket() #creates communication point
bind() #gives this communication point an address
listen() #tells it to be ready for some signal
then the Client:
socket()
connect() #establishes a line between himself and the listening Server
now both can talk with each other by using read() and write().
글쎄, 이것은 C 프로그래밍 언어로 구현되지만 Shell에서도 구현될 수 있습니까? 그렇다면 이렇게 하는 것이 합리적일까요?
답변1
명령줄에서(또는 쉘 스크립트를 통해) 소켓 연결을 설정하는 데 사용할 수 있는 여러 프로그램이 있습니다. 가장 일반적인 것은 아마도 netcat일 것이며, 그 중 적어도 세 가지 구현이 있습니다:
원본 ©1995-1996 Avian Research(호빗의 웹캣). 내가 아는 한 좋은 업스트림 링크는 없으므로 여기 데비안 패키지 추적기에 있습니다:https://tracker.debian.org/pkg/netcat
Netcat6, 재작성. 이제 버려진 것으로 선언되었습니다.http://www.deepspace6.net/projects/netcat6.html
netcat-openbsd, OpenBSD 프로젝트에 의해 재작성되었습니다.어쩌면 그것이 당신이 원하는 것일 수도 있습니다.코드는 다음에서 찾을 수 있습니다.http://bxr.su/openbsd/usr.bin/nc/
socat은 재작성이 아니지만 많은 추가 기능을 갖춘 동일한 아이디어입니다.또 다른 좋은 옵션모든 기능이 필요하고 추가 복잡성에 신경 쓰지 않는 경우.http://www.dest-unreach.org/socat/
bc
매뉴얼 페이지는 많은 예를 제공합니다. 예를 들어 다음은 소켓에서 실행하는 방법입니다(맨 페이지의 더 무서운 예를 기반으로 함).
mkfifo /tmp/f && cat /tmp/f | bc -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f
bc
그런 다음 다음 명령을 사용하여 해당 네트워크에 연결할 수 있습니다 .
nc localhost 1234
또는 을 사용하면 socat
다음과 같습니다.
socat EXEC:'bc -i' TCP4-LISTEN:1234,bind=127.0.0.1 # server
socat - TCP4:127.0.0.1:1234 # client