with Python
서버 구현
import socket # 소켓통신을 위한 모듈을 불러온다. addr = ("0.0.0.0", 5000) # 0.0.0.0은 응용프로그램이 모든 Local 인터페이스를 들을 수 있고, # 당신이 그들을 어떤 것의 포트와도 연결될 수 있음을 의미! with socket.socket() as s: # s = socket.socket() 과 같은 표현 -> 소켓 객채를 생성! # with문 들여쓰기 된 부분이 끝날 때 자동으로 파일이나 소켓을 close! s.bind(addr) # addr은 (hostname, port number pair)로 구성되어 있으며, 소켓을 바인딩(묶음)! s.listen() # TCP 리스너를 Start! (이제 connect가 올 때까지 대기) conn, addr = s.accept() # 클라이언트로부터 connect가 왔을 때 (클라이언트와 통신할 수 있는 소켓, 클라이언트 주소 정보)가 반환! print("client = {}: {}".format(addr[0],addr[1])) # 클라이언트의 ip address, port를 출력! data = conn.recv(1024) # 소켓에서 (bufsize) 만큼 데이터를 수신! [1] conn.send(data) # 받은 데이터를 클라이언트로 다시 전송! [2] print(data.decode()) # 클라이언트에서 echo한 데이터를 출력
클라이언트 구현
import socket addr = ("127.0.0.1", 5000) # 통신하게 될 서버의 주소와 포트를 addr에 저장! (127.0.0.1은 자기 자신을 의미) with socket.socket() as s: s.connect(addr) # 지정된 주소로 TCP 서버 연결을 시도! -> 서버의 accept함수가 실행! str1 = input("echo: ").encode() # input을 통해 서버로 전송하게 될 메시지를 입력! (인코드를 하면 데이터가 깨지지 않음) s.send(str1) # 서버가 recv함수로 대기하고 있을 때, str1 데이터를 서버로 전송! [1] data = s.recv(1024) # 서버가 전송한 데이터를 수신! [2] print(data.decode()) # 내가 입력했던 echo데이터를 주고 받은 후 출력! (원본 데이터 -> 인코드 -> 디코드 -> 원본 데이터)
[1]: 클라이언트에서 서버로 echo데이터 전송(send) -> 서버가 수신(recv)
[2]: 서버에서 클라이언트로 echo데이터 전송(send) -> 클라이언트가 수신(recv)
실행 결과
- 서버
- 클라이언트
댓글
댓글 쓰기