무회blog

Java: websocket, 자바 서버 , 파이썬 클라이언트 ,001 본문

Java

Java: websocket, 자바 서버 , 파이썬 클라이언트 ,001

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

1. 자바 다이나믹 웹(web) 프로젝트 생성 

 

2. java 다이나믹 웹(web) 서블릿 프로젝트에서 라이브러리(lib) 추가 : 

 

javax.websocket-api-1.1.jar
0.04MB

 

3. 서버 : 톰캣 8.5 버전 추가 

 

 

4. 소스 

 

1) 서버 자바(tomcat Servlet) 

websocket.java

import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint("/websocket")
public class websocket {
	/***
	* 웹 소켓이 연결되면 호출되는 이벤트
	*/
	@OnOpen
	public void handleOpen(){
		System.out.println("client is now connected...");
	}

	/**
	* 웹 소켓으로부터 메시지가 오면 호출되는 이벤트
	* @param message
	* @return
	*/
	@OnMessage
	public String handleMessage(String message){
		System.out.println("receive from client : "+message);
		String replymessage = "echo "+message;
		System.out.println("send to client : "+replymessage);
		return replymessage;
	}

	/**
	* 웹 소켓이 닫히면 호출되는 이벤트
	*/
	@OnClose
	public void handleClose(){
		System.out.println("client is now disconnected...");
	}

	/**
	* 웹 소켓이 에러가 나면 호출되는 이벤트
	* @param t
	*/
	@OnError
	public void handleError(Throwable t){
		t.printStackTrace();
	}


	public static void main(String[] args){
		websocket ws = new websocket();

	}


}

 

2) 파이썬 클라이언트 

websocket_client02.py

(파이참 툴로 돌림 ) 

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

# ----------------------------------------------------------------------------------------------//
# java 웹소켓 서버에 접속후 프롬프트 상에서 문자열을 입력받아 자바 웹소켓 서버에 전송하고
# 전송한 문자열에 대한 에코를 리턴 받는다.
# quit(종료) 문자를 입력받을 때까지 계속 웹소켓 연결되어 있다. quit 문자가 입력되면 접속이 자동으로 끊긴다.
# java 웹소켓 서버는 test_wsServlet이고(프로젝트명)  톰캣 서블릿 컨테이너에 웹소켓 서비스를 연것이다.
# ----------------------------------------------------------------------------------------------//

async def connect():

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

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

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

        while str != 'quit':

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

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

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

        # f.close();


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

 

 

Source from DBA  Mr.김 

Comments