파이썬의 SocketServer 모듈은 네트워크 서버의 작성 작업을 간단하게 해줍니다.

(파이썬 3.x 버전에서는 socketserver로 사용할 수 있습니다.)



server.py


# -*- coding: utf-8 -*-

import SocketServer


class MyTCPHandler(SocketServer.BaseRequestHandler):
    """
    The request handler class for our server.

    It is instantiated once per connection to the server, and must
    override the handle() method to implement communication to the
    client.
    """

    def handle(self):
        """
        클라이언트와 연결될 때 호출되는 함수
        상위 클래스에는 handle() 메서드가 정의되어 있지 않기 때문에
        여기서 오버라이딩을 해야함
        """
        self.data = self.request.recv(1024).strip()
        print "{} wrote:".format(self.client_address[0]),
        print self.data
        # 영어의 소문자 데이터를 receive 하면 대문자로 변환해 send
        self.request.sendall(self.data.upper())

if __name__ == "__main__":
    HOST, PORT = "localhost", 3000

    # 서버를 생성합니다. 호스트는 localhost, 포트 번호는 3000
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)

    print("waiting for connection...")

    # Ctrl - C 로 종료하기 전까지는 서버는 멈추지 않고 작동
    server.serve_forever()



clinet.py


# -*- coding: utf-8 -*-

import socket
import sys

HOST, PORT = "localhost", 3000
data = " ".join(sys.argv[1:])

# 소켓을 생성 (SOCK_STREAM 은 TCP 소켓을 의미)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
    # 서버에 연결하고 데이터를 전송
    sock.connect((HOST, PORT))
    sock.sendall(data + "\n")

    # 데이터를 수신하고 소켓 연결을 닫음
    received = sock.recv(1024)
finally:
    sock.close()

print "Sent:     {}".format(data)
print "Received: {}".format(received)



[Errno 10048] 에러는 이미 해당 포트가 사용 중이기 때문에 에러가 발생하는 것입니다. 사용 중인 포트 번호를 바꾸거나 사용 중인 프로세스를 중지해서 해결할 수 있습니다.



출처


https://docs.python.org/2.7/library/socketserver.html#socketserver-tcpserver-example

블로그 이미지

NCookie

,