본문 바로가기

Python

Python socket 사용하기

Python 참 좋은거다

version python 3.6


 기본 web server 띄우기

>python3 -m http.server 7890

위와같이 하고 브라우저에서 server:7890 으로 접속하면 실행한 폴더의 파일목록이 출력된다

해당 폴더에 index.html 파일이 있으면 기본 시작으로 띄워준다.


Socket 사용하기 초간단 샘플

참고 : https://gist.github.com/Integralist/3f004c3594bbf8431c15ed6db15809ae

dummyServer.py 

import socket

import threading


bind_ip = '0.0.0.0'

bind_port = 9999


server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server.bind((bind_ip, bind_port))

server.listen(5)


print('Listening on {}:{}'.format(bind_ip, bind_port))



def handle_client_connection(client_socket):

    request = client_socket.recv(1024)

    print('Received {}'.format(request.decode('utf-8')))

    client_socket.send(bytes('ACK!', 'utf-8'))

    client_socket.close()



while True:

    client_sock, address = server.accept()

    print('Accepted connection from {}:{}'.format(address[0], address[1]))

    client_handler = threading.Thread(

        target=handle_client_connection,

        args=(client_sock,)

    )

    client_handler.start()


dummyClient.py

import socket


client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

client.connect(('0.0.0.0', 9999))


client.send(bytes('GET /index.html HTTP/1.1\r\nHost: hostname.co.kr', 'utf-8'))


response: bytes = client.recv(4096)


print(response.decode('utf-8'))


걍 python 3 설치된곳에서 위의 2개 파일로 실행 테스트 해보면 돌아간다..


ASync Socket 사용하기

asyncServer.py <== 입력받은 계산식을 eval 해서 반환하기

import asyncio



async def handle_client(reader, writer):

    request = None

    while request != 'quit':

        request = (await reader.read(255)).decode('utf8')

        print('Received {}'.format(request))

        response = str(eval(request)) + '\n'

        print('Send {}'.format(response))

        writer.write(response.encode('utf8'))



loop = asyncio.get_event_loop()

loop.create_task(asyncio.start_server(handle_client, 'localhost', 15555))

loop.run_forever()


inputClient.py <== 사용자기 계산식을 입력하고 서버에 던져서 값 받아오기

import socket


server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server.connect(('localhost', 15555))

request = None


try:

    while request != 'quit':

        request = input('>> ')

        if request:

            server.send(request.encode('utf8'))

            response = server.recv(255).decode('utf8')

            print(response)

except KeyboardInterrupt:

    server.close()


'Python' 카테고리의 다른 글

Flask url_for 트릭  (0) 2023.11.29
주가정보 가져오기  (0) 2022.08.11