<이론>
에코 서버와 클라이언트는 네트워크 프로그래밍에서 자주 사용되는 개념입니다. 에코 서버와 클라이언트는 간단한 통신 예제로 사용되며, 클라이언트가 보낸 데이터를 서버가 그대로 돌려주는(에코하는) 간단한 기능을 수행합니다.
- 에코 서버 (Echo Server):
- 에코 서버는 클라이언트가 보낸 데이터를 그대로 돌려주는 서버입니다.
- 클라이언트가 서버에 데이터를 보내면, 서버는 해당 데이터를 받아서 다시 클라이언트로 돌려줍니다.
- 에코 서버는 네트워크 통신을 테스트하고 디버깅할 때 유용하게 사용됩니다.
- 에코 클라이언트 (Echo Client):
- 에코 클라이언트는 서버에 데이터를 보내고, 서버로부터 받은 데이터를 출력하는 클라이언트입니다.
- 클라이언트는 서버에 데이터를 보내기 위해 소켓을 열고 데이터를 전송합니다.
- 서버로부터 데이터를 받으면 해당 데이터를 출력하거나 처리합니다.
에코 서버와 클라이언트 간의 통신은 다음과 같은 과정으로 이루어집니다:
- 클라이언트는 서버의 IP 주소와 포트 번호를 이용하여 서버에 연결합니다.
- 클라이언트는 서버에 데이터를 전송합니다.
- 서버는 클라이언트로부터 받은 데이터를 다시 클라이언트로 돌려줍니다.
- 클라이언트는 서버로부터 받은 데이터를 출력하거나 처리합니다.
이렇게 에코 서버와 클라이언트 간의 간단한 통신을 통해 네트워크 프로그래밍의 기본 개념을 익힐 수 있습니다. 이러한 개념은 복잡한 네트워크 응용 프로그램 개발의 기반이 되며, 실제 응용에서는 더 다양하고 복잡한 기능을 구현할 수 있습니다.
<실습>
저번에 실습한 내용과 연관되어서 에코 서버를 만들어 보고자 합니다.
파이썬(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())
서버를 실행시키면 아래와 같은 화면이 나오게 되는데

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

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

클라이언트 주소와 기입한 내용을 확인할 수 있습니다.
이제 계속 입력을 받고 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())
이제 각각 실행을 해봅시다.

각각 echo를 해주다가 quit이 들어가게 되면 server가 종료되어 더 이상 echo를 하지 않는 것을 알 수 있습니다.
'python' 카테고리의 다른 글
HTTP 서버와 통신(웹 요청) (0) | 2023.08.23 |
---|---|
FTP 서버 익스플로잇[FTP Server Exploit] (0) | 2023.08.03 |
VM를 활용한 FTP소켓 통신 - 2 (0) | 2023.07.28 |
VM를 활용한 FTP소켓 통신 - 1 (0) | 2023.07.28 |
파이썬(Python)3.11.3 클라이언트, 서버 소켓 테스트 (0) | 2023.07.26 |
댓글