이전에 안드로이드에서 소켓 서버를 만드는 방법에 대해 알아본 적이 있습니다. 안드로이드 애플리케이션에서 네트워크 통신을 위해 소켓 서버를 구축하는 것은 안드로이드 네트워크 통신 앱 개발에 필수 학습 내용입니다. 이전에 작성한 글에서는 TCP 서버 소켓을 만드는 방법에 대해 상세하게 설명하였습니다. 이전 포스트를 통해 해당 내용을 자세히 살펴보실 수 있습니다. 만약 안드로이드 앱으로 TCP 클라이언트, TCP 서버를 구성하고 있으시다면 아래의 포스팅을 참고하여 학습해주세요.
2023.07.25 - [Android] - [안드로이드] 서버 및 클라이언트 소켓 통신 - 2
다음으로 C언어로 간단한 소켓 프로그래밍을 하는 방법에 대해 이전에 알아본 적이 있습니다. C언어 프로그래밍에서 네트워크 통신을 위해서는 TCP 소켓을 생성하여 특정 TCP 포트를 bind하고 listen, aceept 처리해야합니다. 이전에 작성한 글에서는 이를 어떻게 만드는지에 대해 상세하게 다루었습니다. 만약 소켓 프로그래밍 프로그램을 C로 개발중이시라면 아래의 포스팅을 참고하여 TCP 서버 소켓 프로그램을 만들어보세요. 아래는 해당 포스팅 링크입니다.
2023.07.13 - [C/응용] - [C언어] 간단한 소켓 프로그래밍 - 1
마지막으로 이전에 알아본 파이썬의 os.write 함수를 이용하여 기존 파일의 마지막에 문자열을 추가하는 방법에 대해 알아보세요. 이전에 작성한 글에서는 파일 처리와 관련하여 이 함수를 어떻게 활용하는지에 대해 상세하게 설명하였습니다. 특히 이미 open 등으로 텍스트 파일 등을 만들어 로컬에 저장해뒀다면 추후 이 파일 맨 마지막에 문자열 추가가 필요할 때가 있습니다. 이런 경우를 os.write 함수로 파이썬에서 처리할 수 있습니다. 해당 내용이 궁금하시다면 아래 링크를 참고해주세요.
2023.08.06 - [Python/os] - [Python] os.write 파일에 내용 쓰기 예제(기존 파일 마지막 추가하기)
오늘은 파이썬에서 TCP 소켓을 생성하고 bind하는 방법에 대해 알아보겠습니다. socket 라이브러리의 socket 함수를 사용하여 소켓을 생성할 수 있습니다. 그리고 bind 함수를 이용하여 소켓을 특정 주소와 포트에 연결할 수 있습니다. 예를 들어, s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)을 통해 소켓을 생성하고, s.bind((HOST, PORT))을 통해 소켓을 주소와 포트에 바인드할 수 있습니다. 직접 아래 코드를 실행하여 파이썬으로 TCP 소켓을 생성하여 bind 해보세요.
# 필요한 모듈 import
import socket
# 소켓 객체 생성
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 주소 및 포트 설정
server_address = ('localhost', 12345)
# 소켓에 주소 및 포트 bind
sock.bind(server_address)
print("소켓이 {} 포트에 바인드 되었습니다.".format(server_address))
다음으로 파이썬에서 TCP 소켓이 클라이언트의 연결 요청을 수신하기 위해 listen 및 accept하는 방법에 대해 알아보겠습니다. 생성된 소켓은 listen 함수를 통해 클라이언트의 연결 요청을 대기하게 됩니다. 그리고 연결 요청이 들어오면 accept 함수를 통해 이를 수락하게 됩니다. 예를 들어, s.listen()을 통해 소켓이 연결 요청을 대기하게 하고, client, addr = s.accept()을 통해 연결 요청을 수락할 수 있습니다. 이렇게 하면 client는 연결된 클라이언트 소켓이 되고, addr은 클라이언트의 주소가 됩니다. 아래 예제 코드를 직접 실행해보세요.
# 필요한 모듈 import
import socket
# 소켓 객체 생성
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 주소 및 포트 설정
server_address = ('localhost', 12345)
# 소켓에 주소 및 포트 bind
sock.bind(server_address)
# 소켓 listen 시작
sock.listen(1)
while True:
# 연결 수락
print("연결을 기다리는 중입니다.")
connection, client_address = sock.accept()
try:
print("{} 주소에서 연결이 들어왔습니다.".format(client_address))
finally:
# 연결 정리
connection.close()