주식 자동매매 시스템

파이썬을 이용한 주식 자동매매 시스템

이미지
파이썬을 이용한 주식 자동매매 시스템 INDEX 환경구축 키움증권 API - 연결테스트 키움증권 API - 계좌정보 조회 키움증권 API - 주문 키움증권 API - 종목정보 가져오기 포트폴리오 - 종목, 업종별 자산 포트폴리오 한국투자증권 API API reference 키움 OpenAPI+ 개발가이드 한국투자증권 OpenAPI 다운로드 및 가이드 Design https://www.design-seeds.com/in-nature/succulents/cacti-color-2/ https://create.piktochart.com/dashboard

[Network] Server-Client Socket 통신 with Java


java Application(Eclipse)
을 이용해 Server-Client TCP/IP Socket 통신하기





Server

ServerSocket을 생성한 후 Client에서 접속할 때까지 기다린다.
ServerSocket을 생성할 때는 port 번호를 지정해줘야 하는데 이때 이미 사용 중인 port 번호를 사용하면 안 된다.
// ServerSocket 생성
ServerSocket serverSocket = new ServerSocket(PORT_NUMBER);
// Client에서 접속할 때까지 기다리며, 접속하면 클라이언트와 연결된 Socket을 return한다.
Socket socket = serverSocket.accept();


Client

서버의 IP, Port번호를 통해 socket을 생성해 server와 통신할 수 있다.
Socket socket = new Socket(IP_ADDRESS, PORT_NUMBER);
// socket이 제대로 생성되었는지, server와 연결되었는지 확인한다
if (socket != null && socket.isConnected()) { }


Server - Client 통신

Stream을 통해 data를 주고받는다. Socket이 생성되면 outputstream과 inputstream을 통해 데이터를 주고받으면 된다.
InputStream in = socket.getInputStream();
InputStreamReader inr = new InputStreamReader(in);
// 빠른속도를 위해 BufferedReader를 사용한다
BufferedReader br = new BufferedReader(inr);
String str = br.readLine();
OutputStream out = socket.getOutputStream();
OutputStreamWriter outw = new OutputStreamWriter(out);
outw.write("안녕");

Full code

위의 code는 Thread를 사용하지 않은 가장 기본적인 server-client 통신 방법이다.
server
    client가 접속할 때까지 대기하며, client가 접속하면 output stream 으로 "안녕"을 보낸다. while문을 통해 client가 계속 접속할 수 있도록 한다.
client
    server의 IP 주소와 port번호를 통해 접속하고, input stream으로 server에서 보낸 data를 읽는다.

Thread를 이용해 다중접속을 가능하게 하고, 실시간으로 데이터를 Receive하는 기능, 1:1 채팅 기능 등은 다른 package에 구현했다. 다음 link로 접속하면 확인할 수 있다. more



#예외

java.net.BindException: Address already in use: NET_Bind
Port 번호가 중복될 때 발생하는 예외이다. 8080의 경우 oracle에서 사용중인 포트번호이기 때문에 소켓을 생성할 수 없다.

 public class Server {
 int port;
 ServerSocket serverSocket;
 Socket socket;

 public Server() throws IOException {
  port = 8080;
  serverSocket = new ServerSocket(port);
 }

 public void startServer() throws IOException {
  try {
   socket = serverSocket.accept();
  } catch (IOException e) {
   throw e;
  }  
 }

 public static void main(String[] args) {  
  Server server = null;
  try {
   server = new Server();
   server.startServer();
  } catch(IOException e) {
   e.printStackTrace();
  }
 }
}

이 블로그의 인기 게시물

Linux에서 CSV파일 사용방법

R에서 외부 데이터 이용하기 (Excel, csv)

[R 함수] aggregate, apply 사용 방법