[ICT인턴십] Python 소켓 프로그래밍

김유상·2022년 10월 19일
0

ICT인턴십

목록 보기
8/21

Python Socket Programming

파이썬은 C/C++, Java와 같이 소켓 프로그래밍을 지원한다. 세부 설정 명령어는 언어에 따라 다르지만 연결 및 통신 프로세스 자체는 같다.

서버 측 순서는 다음과 같다.

  1. 소켓 생성

    sock = socket.socket()
  2. 바인딩

    sock.bind((host, port))
  3. 리스닝

    listen에 대한 인자는 외부 연결을 거부하기 전에 최대 5개의 연결 요청을 큐에 넣기를 원한다는 뜻이다.

    sock.listen(5)
  4. 소켓 통신

    accept()를 이용해 클라이언트에서 보내온 소켓을 받고 내부의 메시지를 수신할 수 있다. 이 메시지는 인코딩 되어있기 때문에 출력하려면 decode 해야 한다. sendall()을 이용해 메시지를 다시 전달할 수도 있다.

    client_sock, addr = sock.accept()
    msg = client_sock.recv(1024)
    print(f'{msg.decode()}')
    client_sock.sendall(msg)
  5. 닫기

    sock.close()

클라이언트 측 순서는 다음과 같다.

  1. 소켓 생성

  2. 서버에 연결

    서버에 연결하려면 서버 측 IP주소와 Port번호(합쳐서 소켓 주소라고 함)를 알아야 한다. 매개변수는 tuple형태를 요구하기 때문에 ()로 감싸주어야 정상적으로 연결할 수 있다.

    sock.connect((host, port))
  3. 소켓 통신

    당연하게도 메시지를 전송할 때 인코딩해 주어야 한다. 그리고 서버와 마찬가지로 메시지를 수신하게 되면 decode를 통해 확인할 수 있다.

    line = input('hello server!')
    sock.sendall(line.encode())
    resp = sock.recv(1024)
    print(f'={resp.decode()}')
  4. 닫기

Referenced: https://docs.python.org/ko/3/howto/sockets.html, https://soooprmx.com/파이썬-소켓-연결-사용법/

profile
continuous programming

0개의 댓글