소프트웨어로 작성된 추상적인 개념의 통신 접속점이며 네트워크 응용 프로그램은 소켓을 통하여 통신망으로 데이터를 송수신
두 개의 프로그램이 네트워크를 통해 서로 통신을 수행할 수 있도록 양쪽에 생성되는 링크의 단자
두 소켓이 연결되면 서로 다른 프로세스끼리 데이터를 전달할 수 있음
특징
Client 측과 server 측이 특정 port를 통해 실시간으로 양방향 통신
실시간 통신이 필요한 경우에 자주 사용
http 통신과 반대되는 성질
server.py
import socket, threading
def binder(client_socket, addr):
# 커넥션이 되면 접속 주소가 나온다.
print('Connected by', addr);
try:
while True:
# 1024byte 이하의 데이터 수신
data = client_socket.recv(1024);
msg = data.decode();
# 수신된 메시지를 콘솔에 출력한다.
print('Received from', addr, msg);
msg = "echo : " + msg;
data = msg.encode();
length = len(data);
client_socket.sendall(length.to_bytes(1024, byteorder="little"));
# 데이터를 클라이언트로 전송한다.
client_socket.sendall(data);
except:
# 접속 해제시 except
print("except : " , addr);
finally:
# 종료
client_socket.close();
# 소켓 생성
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1);
# 10000번 포트 사용
server_socket.bind(('',10000));
server_socket.listen(1);
try:
# 클라이언트가 접속하기 전까지 서버는 실행되야하기 때문에 무한 루프 사용
while True:
client_socket, addr = server_socket.accept();
# 쓰레드 사용해서 대기
th = threading.Thread(target=binder, args = (client_socket,addr));
th.start();
except:
print("server");
finally:
# 종료
server_socket.close();
client.py
import socket
HOST = '127.0.0.1' # local 호스트 사용
PORT = 10000 # 10000번 포트 사용
# 소켓 생성
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 접속
client_socket.connect((HOST, PORT))
while True:
sendData = input("input data :")
client_socket.send(sendData.encode('utf-8'))
client_socket.close();
실행 화면
연결하면 Connetced by가 표시된다.
이제 client 측에서 server 측에 메시지를 계속 보낼 수 있다.
이렇게 소켓 프로그래밍을 파이썬으로 구현해보았다.