회사업무 중 Linux서버에 소켓서버를 둔 후 Client에서 shellScript를 실행시키는 프로그래밍을 하게 되었습니다.
이와 관련된 내용을 정리함과 동시에 sample소스를 함께 추가해보겠습니다!
- TCP/IP Socket 통신?
클라이언트와 서버가 지정된 포트를 이용해 통신한다.
클라이언트에서 연결하거나 데이터 교환시에 포트를 이용하며 JAVA에서는 ServerSocket와 Socket를 이용하여 구현한다.
- Client Socket (클라이언트 소켓)
최초 포트에 접속을 요청하는 소켓이다. 서버소켓으로 연결을 요청하고 데이터 전송을 한다.
- Server Socket (서버 소켓)
서버에서만 사용되는 소켓으로 클라이언트에서 연결 요청이 오기까지 대기상태를 유지않다.
이후 연결 요청시 클라이언트화 연결을 하고 서버내에 소켓을 만들어 데이더 작업을 진행한다.
Java 소켓통신 관련 소스코드
클라이언트 소켓과 서버소켓을 sample 소스코드를 소개합니다.
아래의 코드는 가장 기본코드이며
Server소스에서는 Thread를 구현하여 여러 클라이언트가 들어와도 작업을 처리할 수 있도록 해주는 것이 더 좋습니다.
Client.java
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; public class Client { final static String SERVER_IP = "127.0.0.1"; final static int SERVER_PORT = 1225; final static String MESSAGE_TO_SERVER = "Hi, Server"; public static void main(String[] args) { Socket socket = null; try { /** 소켓통신 시작 */ socket = new Socket(SERVER_IP,SERVER_PORT); System.out.println("socket 연결"); /** Client에서 Server로 보내기 위한 통로 */ OutputStream os = socket.getOutputStream(); /** Server에서 보낸 값을 받기 위한 통로 */ InputStream is = socket.getInputStream(); os.write( MESSAGE_TO_SERVER.getBytes() ); os.flush(); byte[] data = new byte[16]; int n = is.read(data); final String resultFromServer = new String(data,0,n); System.out.println(resultFromServer); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
Server.java
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Server extends Thread { final static int SERVER_PORT = 1225; final static String MESSAGE_TO_SERVER = "Hello, Client"; public static void main(String[] args) { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(SERVER_PORT); } catch (IOException e) { e.printStackTrace(); } try { while (true) { System.out.println("socket 연결 대기"); Socket socket = serverSocket.accept(); System.out.println("host : "+socket.getInetAddress()+" | 통신 연결 성공"); /** Server에서 보낸 값을 받기 위한 통로 */ InputStream is = socket.getInputStream(); /** Server에서 Client로 보내기 위한 통로 */ OutputStream os = socket.getOutputStream(); byte[] data = new byte[16]; int n = is.read(data); final String messageFromClient = new String(data,0,n); System.out.println(messageFromClient); os.write( MESSAGE_TO_SERVER.getBytes() ); os.flush(); is.close(); os.close(); socket.close(); } } catch (IOException e) { e.printStackTrace(); } } } class SocketRun implements Runnable { private Socket socket = null; SocketRun( Socket socket ){ this.socket = socket; } @Override public void run() { } }
'Programming > JAVA' 카테고리의 다른 글
[Java] 특정 URL로 redirect 하기 (0) | 2018.05.28 |
---|