무회blog

python: websocket, 파이썬서버 , 파이썬 클라이언트, 003 본문

Python

python: websocket, 파이썬서버 , 파이썬 클라이언트, 003

최무회 2020. 8. 27. 15:38

소스:

 

1) 서버 소스 (python) 

websocket_server.py

import asyncio

# 웹 소켓 모듈을 선언한다.
import websockets


# 클라이언트 접속이 되면 호출된다.
async def accept(websocket, path):
    while True:
        # 클라이언트로부터 메시지를 대기한다.
        data = await websocket.recv();
        print("receive : " + data);

        # 클라인언트로 echo를 붙여서 재 전송한다.
        await websocket.send("echo : " + data);

# 웹 소켓 서버 생성.호스트는 localhost에 port는 9998로 생성한다.
start_server = websockets.serve(accept, "localhost", 9998);

# 비동기로 서버를 대기한다.
asyncio.get_event_loop().run_until_complete(start_server);
asyncio.get_event_loop().run_forever();

 

 

2) 클라이언트 소스

websocket_pyclient.py 

import asyncio
# 웹 소켓 모듈을 선언한다.
import websockets

# ----------------------------------------------------------------------------------------------//
# Python 웹소켓 서버에 접속에서 프롬프트 상에서 문자열을 입력받아 Python 웹소켓 서버에 전송하고
# 전송한 문자열에 대한 에코를 리턴 받는다.
# quit(종료) 문자를 입력받을 때까지 계속 웹소켓 연결되어 있다. quit 문자가 입력되면 접속이 자동으로 끊긴다.
# Python 웹소켓 서버는 파이참에서 실행중이다.
# ----------------------------------------------------------------------------------------------//

async def connect():

    # 웹 소켓에 접속을 합니다.
    async with websockets.connect("ws://localhost:9998/websocket") as websocket:

        str = input('Python 웹소켓으로 전송할 내용을 입력하세요[종료하려면 quit 입력!]: ')     # 사용자의 입력을 변수에 저장
        #print(str)  # 변수의 내용을 출력

        #입력받은 값을 파일로 저장
        f = open('./chat/chatlog2.txt', 'w')
        f.write(str)

        while str != 'quit':

            # quit가 들어오기 전까지 계속 입력받은 문자열을 전송하고 에코를 수신한다.
            await websocket.send(str);

            # 웹 소켓 서버로 부터 메시지가 오면 콘솔에 출력합니다.
            data = await websocket.recv();
            print(data);
            f.write(data)

            str = input('Python 웹소켓으로 전송할 내용을 입력하세요[종료하려면 quit 입력!]: ')  # 사용자의 입력을 변수에 저장
            # print(str)  # 변수의 내용을 출력

        f.close();


# 비동기로 서버에 접속한다.
asyncio.get_event_loop().run_until_complete(connect())

 

 

Source from DBA  Mr.김 

Comments