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

+ Recent posts