728x90
반응형
파이썬을 이용한 서버와 클라이언트의 통신에 대해서 간단히 알아보겠습니다.
서버와 클라이언트는 소켓을 이용해서 데이터를 주고 받을 수 있는데요. 예제를 통해 알아보도록 합시다.
server.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import socket def run_server(port=4000): host = '' with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((host, port)) s.listen(1) conn, addr = s.accept() msg = conn.recv(1024) print(f'{msg.decode()}') conn.sendall(msg) conn.close() if __name__ == '__main__': run_server() ''' import socket // 소켓 import def run_server(port=4000): // 서버 실행 정의 (포트는 4000으로 임의 지정) host = '' // 호스트 저장 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: // 소켓 선언 (s라는 이름으로 지정) s.bind((host, port)) // 소켓 바인드(호스트, 포트) s.listen(1) // 클라이언트 연결을 받는 상태 conn, addr = s.accept() // 클라이언트로부터 소켓과 클라이언트 주소 반환 msg = conn.recv(1024) // 연결된 클라이언트로부터 데이터 받음 (1024 바이트) print(f'{msg.decode()}') // 받은 데이터 출력 conn.sendall(msg) // 다시 데이터 보내기 conn.close() // 연결 종료 if __name__ == '__main__': run_server() // 서버 실행 ''' | cs |
client.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | import socket def run(): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect(('127.0.0.1', 4000)) line = input(':') s.sendall(line.encode()) resp = s.recv(1024) print(f'>{resp.decode()}') if __name__ == '__main__': run() ''' def run(): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect(('127.0.0.1', 4000)) // 호스트와 포트로 서버 연결 진행 line = input(':') // 입력 값 s.sendall(line.encode()) // 입력된 값을 서버로 전송 resp = s.recv(1024) // 서버로부터 recv를 통해 데이터 받음 print(f'>{resp.decode()}') // 받은 데이터를 출력 if __name__ == '__main__': run() ''' | cs |
각 코드 설명은 아래 주석을 통해 작성했습니다.
이제 터미널에서 서버와 클라이언트를 순서대로 실행해봅시다.
1. server.py 실행
실행하면 아무런 결과도 뜨지 않습니다. 서버만 실행해둔 상태이니 당연하겠죠?
2. client.py 실행
다른 터미널 창을 키고, client.py를 실행시켜줍니다. 아래 ':'으로 입력할 수 있는 칸이 나오는데요. hello~!라고 작성 후 enter를 입력해서 서버에게 보내봅시다.
3. server.py를 실행한 터미널 화면 확인
클라이언트에서 입력한 hello~!가 출력되고 서버가 종료된 모습을 확인할 수 있습니다.
msg = conn.recv(1024)
print(f'{msg.decode()}')
여기서 클라이언트로부터 hello~!를 받아와 msg 변수에 저장한 후, 출력하는 모습을 알 수 있겠죠?
3. client.py를 실행한 터미널 화면 확인
입력했던 hello~!가 다시 >이후에 출력되고 클라이언트가 종료된 모습을 확인할 수 있습니다.
resp = s.recv(1024)
print(f'>{resp.decode()}')
여기서 다시 서버로부터 hello~!를 받아와 resp에 저장한 후, 출력되겠습니다.
클라이언트와 서버를 작성한 후 소켓을 통해 서로 주고받는 TCP 통신에 대해 아주 간단히 알아봤습니다.
728x90
반응형
'파이썬(Python)' 카테고리의 다른 글
[Pandas] 데이터 분석 (Google Colab 활용) (0) | 2019.08.30 |
---|---|
파이썬(Python) 서버로 비트맵 이미지와 데이터 소켓 통신하기 (1) | 2018.09.09 |