Python 2.7 Network Socket 소켓 통신요새 Python Flask와 Docker을 공부하고 있어서 블로그에 정리를 해보려고 합니다. Show 띠용!!
Network SocketNetwork Socket Address에는 IP Address와 Port Number을 포함한다.
Server Socket
Client Socket
Socket Method
Server Socket 파일 만들기
serv.pyServer Socket 파일 만들기
cli.py[Server에서 sev.py 실행]서버측에서 sev.py을 실행시키면 클라이언트가 접속하기전 까지 터미널창에는 아무런 반응이 보이지 않는다. 하지만 아래 사진과 같이 프로세스를 확인해보면 정상적으로 port가 열린걸 볼 수 있다. [1234 port 확인][Client에서 cli.py 실행]Client측에서 실행한다면 서버에 연결하고나서 서버측에서 보낸 문자열을 받는다. [Server]서버측에서 클라이언트의 IP주소와 클라이언트 포트번호를 확인할 수 있다. 캡처된 패킷을 Wireshark을 통해 Server와 Client간 패킷을
볼 수 있다. Data부분을 보면 Server가 Client로 "Hi! is..." 문자열을 전송하는걸 볼 수 있다. 전송시 평문으로 전송하기 때문에 Wireshark로 패킷을 캡처하여 문자열을 볼 수 있다.
while_sev.py위의 코드중 while문을 통해서 하나의 서버에서 여러대의 클라리언트 요청을 계속 처리 및 제공할 수 있다. [Server측에 다수의 클라이언트 연결]While 구문을 통해 다수의 연결접속에도 서버가 종료되지 않고 계속 작동되는걸 볼 수 있다. UDP Server Socket (adsbygoogle = window.adsbygoogle || []).push({});
udp_sev.pyUDP는 비연결형 프로토콜이므로, 연결 설정 (3 way handshake)과정이 필요 없다.
udp_cli.pyTCP와 다르게 Connect후 전송하는 과정 없이 바로 sendto 메소드에 전송할 문자열과 Server IP, PORT을 적어 전송한다. UDP Packet Client -> Server위 사진을 보면 연결 과정 없이 Client가 Server로 바로 데이터를 전송한다. 하지만 초록색 박스를 보면 "192.168.219.134" 클라이언트가 서버로 "192.168.219.133" 데이터를 전송했지만 서버측에서 "ICMP Destination unreachable" 패킷이 반환된 걸 확인할 수 있다. UDP Packet의 Data 부분에 "Hello All" 문자열을 담아 전송된걸 확인 할 수 있다. |