파이썬(Python) 에코 클라이언트, 서버 구현
python

파이썬(Python) 에코 클라이언트, 서버 구현

연구소 인턴 2023. 7. 26.
300x250
반응형

<이론>

에코 서버와 클라이언트는 네트워크 프로그래밍에서 자주 사용되는 개념입니다. 에코 서버와 클라이언트는 간단한 통신 예제로 사용되며, 클라이언트가 보낸 데이터를 서버가 그대로 돌려주는(에코하는) 간단한 기능을 수행합니다.

  1. 에코 서버 (Echo Server):
    • 에코 서버는 클라이언트가 보낸 데이터를 그대로 돌려주는 서버입니다.
    • 클라이언트가 서버에 데이터를 보내면, 서버는 해당 데이터를 받아서 다시 클라이언트로 돌려줍니다.
    • 에코 서버는 네트워크 통신을 테스트하고 디버깅할 때 유용하게 사용됩니다.
  2. 에코 클라이언트 (Echo Client):
    • 에코 클라이언트는 서버에 데이터를 보내고, 서버로부터 받은 데이터를 출력하는 클라이언트입니다.
    • 클라이언트는 서버에 데이터를 보내기 위해 소켓을 열고 데이터를 전송합니다.
    • 서버로부터 데이터를 받으면 해당 데이터를 출력하거나 처리합니다.

에코 서버와 클라이언트 간의 통신은 다음과 같은 과정으로 이루어집니다:

  1. 클라이언트는 서버의 IP 주소와 포트 번호를 이용하여 서버에 연결합니다.
  2. 클라이언트는 서버에 데이터를 전송합니다.
  3. 서버는 클라이언트로부터 받은 데이터를 다시 클라이언트로 돌려줍니다.
  4. 클라이언트는 서버로부터 받은 데이터를 출력하거나 처리합니다.

이렇게 에코 서버와 클라이언트 간의 간단한 통신을 통해 네트워크 프로그래밍의 기본 개념을 익힐 수 있습니다. 이러한 개념은 복잡한 네트워크 응용 프로그램 개발의 기반이 되며, 실제 응용에서는 더 다양하고 복잡한 기능을 구현할 수 있습니다.

<실습>

저번에 실습한 내용과 연관되어서 에코 서버를 만들어 보고자 합니다.

파이썬(Python)3.11.3 클라이언트, 서버 소켓 테스트 (tistory.com) 여기 참고하시면 됩니다.

IDLE을 실행시켜 Echo server를 만들어 줍니다.

import socket

addr = ("0.0.0.0", 4444)

with socket.socket() as s :
    s.bind(addr)
    s.listen()
    print("server is started")
    conn, addr = s.accept() #연결 수락과정
    print("client ={}:{}".format(addr[0],addr[1]))
    data = conn.recv(1024)
    conn.send(data)
    print(data.decode())

새로운 IDLE을 실행시켜 Echo client를 만들어 줍니다.

import socket
addr = ("127.0.0.1", 4444)
str1 = input("echo: ").encode()

with socket.socket() as s:
    s.connect(addr)
    s.send(str1)
    data = s.recv(1024)

print(data.decode())

서버를 실행시키면 아래와 같은 화면이 나오게 되는데

파이썬(Python) 에코 클라이언트, 서버 구현 - undefined - <실습>

클라이언트도 실행시켜 입력할 내용을 기입해 줍니다.

파이썬(Python) 에코 클라이언트, 서버 구현 - undefined - <실습>

다시 서버 창으로 가서 보게 되면

파이썬(Python) 에코 클라이언트, 서버 구현 - undefined - <실습>

클라이언트 주소와 기입한 내용을 확인할 수 있습니다.

이제 계속 입력을 받고 echo를 하는 프로그램으로 만들어봅시다.

먼저 echo server 쪽 소스코드입니다.

quit를 입력을 받으면 종료가 되도록 설정하였으며, 그 외에는 계속 echo를 실행합니다.

import socket

addr = ("0.0.0.0", 4444)

with socket.socket() as s :
    s.bind(addr)
    s.listen()
    print("server is started")
    conn, addr = s.accept() #연결 수락과정
    print("client ={}:{}".format(addr[0],addr[1]))
    while(1):
        data = conn.recv(1024)
        if data.decode() =="quit" :
            print("server close")
            exit()
        conn.send(data)
        print(data.decode())

다음은 클라이언트 수정본입니다.

import socket
addr = ("127.0.0.1", 4444)

with socket.socket() as s:
    s.connect(addr)
    while(1):
        str1 = input("echo: ").encode()
        s.send(str1)
        data = s.recv(1024)
        print(data.decode())

이제 각각 실행을 해봅시다.

파이썬(Python) 에코 클라이언트, 서버 구현 - undefined - <실습>

각각 echo를 해주다가 quit이 들어가게 되면 server가 종료되어 더 이상 echo를 하지 않는 것을 알 수 있습니다.

 

300x250
반응형

댓글