728x90
TCP 소켓 프로그래밍에서 서버와 클라이언트가 동작하는 방식은 아래와 같습니다.
Server socket
-
socket(AF_INET, SOCK_STREAM) : 소켓 객체 생성
-
socket.bind(address) : 생성한 소켓을 서버 IP 및 포트를 튜플 형태로 맵핑
-
socket.listen() : 연결 요청 대기 상태 설정
-
socket.accept() : 연결 승낙 후 실제 통신 소켓 반환
-
socket.send(byte) or socket.sendall(byte) : 데이터 송신
-
socket.recv(bufsize) : 데이터 수신. bufsize는 한번에 수신되는 데이터 크기
-
socket.close() : 연결 종료
Client socket
-
socket.connect(address) : 서버 소켓에 연결 요청. 인자로 address를 튜플 형태
-
socket.send(byte) or socket.sendall(byte) : 데이터 송신
-
socket.recv(bufsize) : 데이터 수신. bufsize는 한번에 수신되는 데이터 크기
#tcpserver.py
from socket import *
host = "127.0.0.1"
port = 12345 # 임의번호
serverSocket = socket(AF_INET, SOCK_STREAM) # 소켓 생성
serverSocket.bind((host,port)) # 생성한 소켓에 설정한 HOST와 PORT 맵핑
serverSocket.listen(1) # 맵핑된 소켓을 연결 요청 대기 상태로 전환
print("대기중입니다")
connectionSocket,addr = serverSocket.accept() # 실제 소켓 연결 시 반환되는 실제 통신용 연결된 소켓과 연결주소 할당
print(str(addr),"에서 접속되었습니다.") # 연결 완료했다고 알림
data = connectionSocket.recv(1024) # 데이터 수신, 최대 1024
print("받은 데이터 :", data.decode("utf-8")) # 받은 데이터 UTF-8
connectionSocket.send("I am a server".encode("utf-8")) # 데이터 송신
print("메시지를 보냈습니다.")
serverSocket.close() # 서버 닫기
# tcpclient.py
from socket import *
ip = "127.0.0.1"
port = 12345
clientSocket = socket(AF_INET, SOCK_STREAM) # 소켓 생성
clientSocket.connect((ip,port)) # 서버와 연결
print("연결 확인됐습니다.")
clientSocket.send("I am a client".encode("utf-8")) # 데이터 송신
print("메시지를 전송했습니다.")
data = clientSocket.recv(1024) # 데이터 수신
print("받은 데이터 : ",data.decode("utf-8"))
clientSocket.close() # 연결 종료
실행결과
728x90
'Programming > Python' 카테고리의 다른 글
Python 채팅 프로그램 만들기 (0) | 2020.01.13 |
---|---|
Python 예외 처리하기 (0) | 2020.01.10 |
Python 모듈 사용하기(random, datetime, time) (0) | 2020.01.10 |
Python class 사용하기 (0) | 2020.01.10 |
Python 터틀 그래픽 사용하기 (0) | 2020.01.09 |