Socket_1
Socket_1: 문자열을 아스키코드로 변환하는 소켓 프로그래밍
프로그램 설명
이 프로그램은 TCP 소켓을 이용하여 클라이언트가 전송한 문자열을 서버가 받아, 해당 문자열을 아스키코드 리스트로 변환한 뒤, 다시 클라이언트에게 전송하는 방식으로 작동한다.
양방향 통신은 문자열 기반이며, 서버는 수신한 문자열을 각 문자마다 ord()
를 통해 아스키 코드로 바꾼다.
- 통신 방식: TCP
- 인코딩 방식: UTF-8
- 통신 구조: 서버 1개, 클라이언트 1개 (단일 연결)
소스 프로그램
1) ascii_server.py
(서버)
import socket
HOST = '127.0.0.1'
PORT = 65432
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
print(f"[서버] 연결 대기 중... (포트: {PORT})")
conn, addr = s.accept()
with conn:
print(f"[서버] 연결됨: {addr}")
while True:
data = conn.recv(1024).decode()
if not data:
break
print(f"[서버] 받은 문자열: {data}")
ascii_codes = [str(ord(c)) for c in data]
result = ','.join(ascii_codes)
print(f"[서버] 아스키코드로 변환: {result}")
conn.sendall(result.encode())
2) ascii_client.py
(클라이언트)
import socket
HOST = '127.0.0.1'
PORT = 65432
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
while True:
msg = input("보낼 문자열 입력 (종료: 엔터): ")
if msg == '':
break
s.sendall(msg.encode())
data = s.recv(1024).decode()
print(f"[클라이언트] 받은 아스키코드: {data}")
입력 내용
클라이언트 입력 (직접 입력):
보낼 문자열 입력 (종료: 엔터): hello
출력 내용 + 입력 내용
서버 측 출력:

클라이언트 측 출력:

실행 방법 요약
ascii_server.py
먼저 실행- VSCode에서 터미널 분할 또는 새 창 열기
ascii_client.py
실행- 클라이언트에서 문자열 입력 시, 서버가 아스키 코드로 변환하여 응답
서버 코드 설명 (ascii_server.py
)
이 코드는 클라이언트로부터 문자열을 받아, 해당 문자열을 아스키코드로 변환한 후 클라이언트에게 다시 전송하는 TCP 서버 프로그램이다.
import socket
- 소켓 프로그래밍을 위해
socket
모듈을 불러온다.
HOST = '127.0.0.1'
PORT = 65432
HOST
는 서버 IP 주소로, 현재 컴퓨터를 의미하는127.0.0.1
을 사용한다.PORT
는 통신에 사용할 포트 번호로, 일반적으로 1024 이상의 값을 사용한다.
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
- TCP 통신을 위한 소켓 객체를 생성한다.
AF_INET
은 IPv4,SOCK_STREAM
은 TCP를 의미한다. with
문을 사용함으로써 소켓 사용이 끝나면 자동으로 닫히도록 한다.
s.bind((HOST, PORT))
s.listen()
bind()
를 통해 소켓을 지정한 IP 주소와 포트 번호에 바인딩한다.listen()
을 호출하여 클라이언트의 접속 요청을 대기 상태로 만든다.
conn, addr = s.accept()
- 클라이언트의 연결 요청이 들어오면 이를 수락하고, 연결 소켓
conn
과 클라이언트 주소addr
을 반환한다.
with conn:
while True:
data = conn.recv(1024).decode()
conn.recv()
를 통해 클라이언트로부터 데이터를 수신한다. 최대 1024바이트까지 받으며, 받은 데이터는 문자열로 디코딩한다.
if not data:
break
- 수신된 데이터가 없으면 연결이 종료되었음을 의미하므로 반복문을 종료한다.
ascii_codes = [str(ord(c)) for c in data]
result = ','.join(ascii_codes)
- 수신한 문자열의 각 문자를
ord()
함수를 이용하여 아스키 코드로 변환한다. - 변환된 숫자들을 문자열로 바꾼 뒤, 쉼표로 연결하여 하나의 문자열로 만든다.
conn.sendall(result.encode())
- 변환된 아스키코드 문자열을 클라이언트에게 전송한다.
클라이언트 코드 설명 (ascii_client.py
)
이 코드는 사용자가 입력한 문자열을 서버로 전송하고, 서버로부터 변환된 아스키코드 문자열을 수신하여 출력하는 TCP 클라이언트 프로그램이다.
import socket
- 소켓 모듈을 불러온다.
HOST = '127.0.0.1'
PORT = 65432
- 서버의 IP 주소와 포트 번호를 설정한다. 서버와 동일한 값으로 지정해야 연결된다.
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
- TCP 소켓을 생성하고 서버에 연결한다.
while True:
msg = input("보낼 문자열 입력 (종료: 엔터): ")
if msg == '':
break
- 사용자로부터 문자열을 입력받는다. 아무 것도 입력하지 않고 엔터를 누르면 반복문을 종료하고 프로그램을 종료한다.
s.sendall(msg.encode())
- 입력받은 문자열을 UTF-8로 인코딩하여 서버에 전송한다.
data = s.recv(1024).decode()
print(f"[클라이언트] 받은 아스키코드: {data}")
- 서버로부터 응답을 받아 디코딩한 후 출력한다.