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데이터를 주고 받은 후 출력! (원본 데이터 -> 인코드 -> 디코드 -> 원본 데이터)
댓글
댓글 쓰기