답변:
nc
( netcat
) 사용
섬기는 사람:
$ nc -l localhost 3000
고객:
$ nc localhost 3000
서버와 클라이언트 모두 표준 출력 / 입력을 읽고 씁니다.
서버와 클라이언트가 같은 컴퓨터에있을 때 작동합니다. 그렇지 않으면 localhost
서버의 외부 이름으로 변경 하십시오.
약간 더 흥미로운 "서버"는 연결하여 시간을 보내면 시간을 알려주고 다음 d
을 보내면 종료됩니다 q
.
서버 ( bash
) :
#!/bin/bash
coproc nc -l localhost 3000
while read -r cmd; do
case $cmd in
d) date ;;
q) break ;;
*) echo 'What?'
esac
done <&"${COPROC[0]}" >&"${COPROC[1]}"
kill "$COPROC_PID"
고객 세션 :
$ nc localhost 3000 디 목 1 월 12 일 18:04:21 CET 2017 여보세요? 뭐? 큐
서버는 이후 q
에 종료 되지만 클라이언트는를 누를 때까지 서버가 종료 되었음을 감지하지 못합니다 Enter.
일반적으로 조언 netcat
이 더 좋습니다.
그러나에 bash
그리고 ksh
당신은 또한이 작업을 수행 할 수 있습니다
exec 3<>/dev/tcp/hostname/port
echo "request" 1>&3
response="$(cat <&3)"
1>&3
입니까? 그것이 무엇을 나타내는 지 잘 모르겠습니다
echo "request" >&3
안 돼요, 1은 중복 된 것 같아요
netcat 시도 (예 : nc)
echo GET / HTTP/1.0 | nc 0 80
HTTP/1.1 400 Bad Request
Date: Thu, 12 Jan 2017 13:44:23 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 311
Connection: close
Content-Type: text/html; charset=iso-8859-1
echo GET / HTTP/1.0
로컬 HTTP 서버에 GET ( )을 보냅니다.많은 경우에 netcat / socat에 액세스 할 수 없었습니다. exec
분산 컴퓨팅 환경에서 bash를 사용하는 데 문제가있었습니다 .
그 보급으로 인해 대안 솔루션은 GNU AWK의 TCP / IP 기능을 사용하는 것입니다. "양방향 파이프"연산자를 기반으로하는 간단한 구문을 제공합니다.
다음은 이 소스 에서 소켓을 통해 TCP 메시지를 보내는 수정 된 예입니다 .
BEGIN {
NetService = "/inet/tcp/0/cs.wisc.edu/finger"
print "coke" |& NetService
close(NetService)
}
주소의 전체 구문은 다음과 같습니다 /net-type/protocol/local-port/remote-host/remote-port
.. 이 local-port
0으로 설정 되면 로컬 호스트는 일반적으로 원하는 포트를 자동으로 선택합니다. gawk
의 TCP / IP 네트워킹 기능 에 대한 자세한 내용은 다음 을 참조하십시오.
ctrl+c
표시되지 않습니다. 예를 들어 에코를 사용하는 경우echo "cookie" | nc localhost 9090
클라이언트의 출력 스트림은 닫히지 만 (보내는) 클라이언트는 여전히 서버 결과를 기다립니다.