파이썬은 C/C++, Java와 같이 소켓 프로그래밍을 지원한다. 세부 설정 명령어는 언어에 따라 다르지만 연결 및 통신 프로세스 자체는 같다.
서버 측 순서는 다음과 같다.
소켓 생성
sock = socket.socket()
바인딩
sock.bind((host, port))
리스닝
listen
에 대한 인자는 외부 연결을 거부하기 전에 최대 5개의 연결 요청을 큐에 넣기를 원한다는 뜻이다.
sock.listen(5)
소켓 통신
accept()를 이용해 클라이언트에서 보내온 소켓을 받고 내부의 메시지를 수신할 수 있다. 이 메시지는 인코딩 되어있기 때문에 출력하려면 decode 해야 한다. sendall()을 이용해 메시지를 다시 전달할 수도 있다.
client_sock, addr = sock.accept()
msg = client_sock.recv(1024)
print(f'{msg.decode()}')
client_sock.sendall(msg)
닫기
sock.close()
클라이언트 측 순서는 다음과 같다.
소켓 생성
서버에 연결
서버에 연결하려면 서버 측 IP주소와 Port번호(합쳐서 소켓 주소라고 함)를 알아야 한다. 매개변수는 tuple형태를 요구하기 때문에 ()로 감싸주어야 정상적으로 연결할 수 있다.
sock.connect((host, port))
소켓 통신
당연하게도 메시지를 전송할 때 인코딩해 주어야 한다. 그리고 서버와 마찬가지로 메시지를 수신하게 되면 decode를 통해 확인할 수 있다.
line = input('hello server!')
sock.sendall(line.encode())
resp = sock.recv(1024)
print(f'={resp.decode()}')
닫기
Referenced: https://docs.python.org/ko/3/howto/sockets.html, https://soooprmx.com/파이썬-소켓-연결-사용법/