본문 바로가기

ComputerScience/Network

Socket programming (Python)

728x90

1. TCP Socket programming

TCP client

1. 패킷을 전송하고 싶은 server의 이름(ex. nsl2.cau.ac.kr) port번호(ex. 0119)를 적는다.

2. 서버와 클라이언트가 한 machine에서 돌아간다면 local port(client port)와 server port는 반드시 다른걸 써야 한다. (ip가 동일하니까 port로 구분해야 한다.) 

3. 지정한 서버로 connect요청

4. 메시지를 담아서 client socket을 통해 서버로 전송한다. (연결이 되었기 때문에 ip, port가 필요없다.)

5. client socket을 통해서 서버로부터 온 메시지를 읽는다. 코드의 1024은 받을 버퍼의 크기를 제한한 것이다.

5. 메시지 출력, 소켓 통신 종료

 

TCP Server

1. server socket을 만들고 포트번호를 지정해준다.

2. 반복문으로 기다리면서 계속해서 tcp connection을 server socket을 통해 수신한다.

3. client로부터의 connection을 accept하면 connection socket을 만든다.

4. connection socket이 reply를 client에게 보내준다. 이미 연결이 되었기 때문에 client ip, port는 필요없다.

5. 완료 후 socket 종료

2. UDP Socket programming

UDP Client

1. 패킷을 전송하고 싶은 server의 이름(ex. nsl2.cau.ac.kr) port번호(ex. 0119)를 적는다.

2. 서버와 클라이언트가 한 machine에서 돌아간다면 local port(client port)와 server port는 반드시 다른걸 써야 한다. (ip가 동일하니까 port로 구분해야 한다.) 

3. 메시지를 담아서 client socket을 통해 서버로 전송한다.

4. client socket을 통해서 서버로부터 온 메시지를 읽는다. 코드의 2048은 받을 버퍼의 크기를 제한한 것이다.

5. 메시지 출력, 소켓 통신 종료

 

UDP Server

1. server socket을 만들고 포트번호를 지정해준다.

2. 반복문으로 계속해서 패킷을 server socket을 통해 수신한다.

3. 수행할 작업을 마치고 server socket으로 reply를 보낸다. clientAddress는 패킷을 수신했을때 담겨있던 내용을 가져온다.

3. 실행준비

서버역할을 할 nsl2.cau.ac.kr, 클라이언트 역할을 할 nsl5.cau.ac.kr에 각각 접속한다.

TCP/UDP Server.py와 TCP/UDP Client.py를 scp를 사용해서 서버에 업로드 한다.

4. UDP

UDP 서버를 실행한다.

vi로 UDPClient.py 소스코드를 살펴보면 client의 port번호를 지정하지 않았다. 운영체제가 알아서 랜덤 port 넘버를 할당한다.

UDPClient.py 실행 후 hello world 입력

서버는 client의 응답을 수신했고 reply를 보내줬다. 

메시지를 받은 client의 ip와 port번호가 나온다. UDP에서는 이 정보가 반드시 필요하다.

서버로부터 HELLO WORLD로 변환한 응답을 잘 수신했다.

5. TCP

마찬가지로 TCPServer.py와 TCPClient.py를 순서대로 실행한다.

client를 실행하자마자 server에서는 connection을 accept했다.

728x90
반응형