서버 1대를 돌린 후 클라이언트가 특정 메시지를 전달하고 소켓을 종료하는 프로그램을 만들어 봅시다

 

 

해당 코드는 여기

https://github.com/hyeonukdev/Python-Socket/tree/master/basic

 

hyeonukdev/Python-Socket

Contribute to hyeonukdev/Python-Socket development by creating an account on GitHub.

github.com

 


 

해당 개념은 여기

https://hyeonukdev.tistory.com/110

 

Python Socket

Socket을 활용한 TCP server/client TCP : Transmission Control Protocol - 수신자가 전달 받지 못한 패킷을 발신자가 감지하여 재전송하기 때문에 신뢰성 높음 - 발신자가 전송한 순서대로 수신자에서 읽기 가능

hyeonukdev.tistory.com


먼저 server

import socket

# 접속할 서버 주소입니다. 여기에서는 루프백(loopback) 인터페이스 주소 즉 localhost를 사용합니다.
HOST = '127.0.0.1'

# 클라이언트 접속을 대기하는 포트 번호입니다.
PORT = 9999

# 소켓 객체를 생성합니다.
# 주소 체계(address family)로 IPv4, 소켓 타입으로 TCP 사용합니다.
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 포트 사용중이라 연결할 수 없다는
# WinError 10048 에러 해결를 위해 필요합니다.
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

# bind 함수는 소켓을 특정 네트워크 인터페이스와 포트 번호에 연결하는데 사용됩니다.
# HOST는 hostname, ip address, 빈 문자열 ""이 될 수 있습니다.
# 빈 문자열이면 모든 네트워크 인터페이스로부터의 접속을 허용합니다.
# PORT는 1-65535 사이의 숫자를 사용할 수 있습니다.
server_socket.bind((HOST, PORT))

# 서버가 클라이언트의 접속을 허용하도록 합니다.
server_socket.listen()

# accept 함수에서 대기하다가 클라이언트가 접속하면 새로운 소켓을 리턴합니다.
client_socket, addr = server_socket.accept()

# 접속한 클라이언트의 주소입니다.
print('Connected by', addr)

# 무한루프를 돌면서
while True:

    # 클라이언트가 보낸 메시지를 수신하기 위해 대기합니다.
    data = client_socket.recv(1024)

    # 빈 문자열을 수신하면 루프를 중지합니다.
    if not data:
        break

    # 수신받은 문자열을 출력합니다.
    print('Received from', addr, data.decode())

    # 받은 문자열을 다시 클라이언트로 전송해줍니다.(에코)
    client_socket.sendall(data)


# 소켓을 닫습니다.
client_socket.close()
server_socket.close()

 

다음은 client

import socket

# 서버의 주소입니다. hostname 또는 ip address를 사용할 수 있습니다.
HOST = '127.0.0.1'
# 서버에서 지정해 놓은 포트 번호입니다.
PORT = 9999

# 소켓 객체를 생성합니다.
# 주소 체계(address family)로 IPv4, 소켓 타입으로 TCP 사용합니다.
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 지정한 HOST와 PORT를 사용하여 서버에 접속합니다.
client_socket.connect((HOST, PORT))

# 메시지를 전송합니다.
client_socket.sendall('서버로 보내기!!'.encode())

# 메시지를 수신합니다.
data = client_socket.recv(1024)
print('Received', repr(data.decode()))

# 소켓을 닫습니다.
client_socket.close()

 

server.py를 먼저 실행한 후

clinet.py를 실행

 

sendall을 통해서 보낸 메시지가 server측에 잘 전달되는 것을 확인할 수 있다

 

 

반응형

'SW ENGINEERING > Programing' 카테고리의 다른 글

Python Socket : 멀티쓰레드를 활용한 채팅  (0) 2021.06.28
Python Socket : 그룹 채팅  (0) 2021.06.28
Python Socket  (0) 2021.06.21
RESTful API  (0) 2021.05.31
ERROR 처리  (0) 2021.03.08
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기