[참조] https://uiandwe.tistory.com/1245

파이썬, 에코 서버/클라이언트 예제

 

글. 수알치 오상문

 

[echo-server.py]

import socket

HOST = "127.0.0.1" # 서버 IP: 'localhost'
PORT = 9999        # 서버 포트 (1023 이후이고 미사용중인 포트 지정)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()

with conn:
    print(f"Connected by {addr}, Hello!")
    while True:
        data = conn.recv(1024)
        if data.decode('utf-8') == 'quit':
            print("Received:", data.decode('utf-8'))
            conn.sendall(data)  # 메아리~
            print('Goodbye!')
            break
        if data:
            print("Received:", data.decode('utf-8'))
            conn.sendall(data)  # 메아리~

s.close()

 

[echo-client.py]

import socket

HOST = "127.0.0.1" # 접속할 서버 IP: 'localhost'
PORT = 9999        # 접속할 서버 포트

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
    s.connect((HOST, PORT))
except ConnectionRefusedError as e:
    print('서버에 연결할 수 없습니다.')
    print('1. 서버의 ip주소와 포트번호가 올바른지 확인하십시오.')
    print('2. 서버 실행 여부를 확인하십시오.')
    print('ERROR:', e)
    exit(1)   

while True:
    try:
            send_data = input('Input (종료=quit입력: ) ')
            s.sendall(bytes(send_data, encoding='utf-8'))
            recv_data = s.recv(1024)
            if recv_data.decode('utf-8') == 'quit':
                print('Goodbye!')
                break
            print("Received:", recv_data.decode('utf-8'))
    except Exception as e:
            print('ERROR:', e)
            break

s.close()

 

 

서버와 클라이언트를 실행하고 테스트하는 절차는 다음과 같습니다.

 

1. 커맨드창(cmd)을 열고 서버를 실행합니다. (Windows)

python echo-server.py 

 

2. 다른 커맨드창(cmd)을 열고 클라이언트를 실행합니다. (Windows)

python echo-client.py

 

3. 클라이언트에 메시지를 입력하고 엔터를 누르면, 서버에 전송되고, 서버는 같은 메시지를 돌려줍니다.

 

4. 종료하려면 quit를 입력하고 엔터를 누릅니다.

 

[실행 화면]

 

반응형

+ Recent posts