프로그래밍/Java

자바(Java)〃통신(1) 소켓통신으로 메시지 보내기

HUN IT Blog 2016. 2. 17. 15:55
반응형



JAVA로 소켓통신을 하기 위한 가장 심플한 코드입니다. 아래 코드는 서버를 실행하면 소켓이 열리고, 클라이언트를 따로 실행하여 메시지를 보내면 소켓에 저장됩니다. 소켓에 저장된 내용을 클라이언트에 뿌려주는 방식입니다.


단순히 메시지를 송/수신하여 확인하는것으로 아직 별다른 기능이 구현되어 있지 않지만, 이 기본코드를 통해서 앞으로 기능들을 추가할 생각입니다.



◇ 서버 출력 결과  / 소스


package socket.server;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
 
public class SimpleServer {
 
    public static void main(String[] args) throws IOException{
        
        SimpleServer ss = new SimpleServer();
        ss.ServerRun();
    }
 
    public void ServerRun() throws IOException{
        
        ServerSocket server = null;
        int port = 4200;
        Socket socket = null;
        
        InputStream is = null;
        InputStreamReader isr = null;
        BufferedReader br = null;
        
        try{
            server = new ServerSocket(port);
            while(true){
                System.out.println("-------접속 대기중------");
                // 클라이언트가 접속하면 통신할 수 있는 소켓 반환
                socket = server.accept();         
                System.out.println(socket.getInetAddress() + "로 부터 연결요청이 들어옴");
                
                is = socket.getInputStream();
                isr = new InputStreamReader(is);
                br = new BufferedReader(isr);
                // 클라이언트로부터 데이터를 받기 위한 InputStream 선언
                
                String data=null;
                data=br.readLine();
                System.out.println("클라이언트로 부터 받은 데이터:" + data);
                
                receiveData(data, socket);
                // 받은 데이터를 그대로 다시 보내기
                System.out.println("****** 전송 완료 ****");
            }
        }catch (Exception e) {
                e.printStackTrace();
            }finally {
                try{
                    br.close();
                    isr.close();
                    is.close();
                    server.close();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
    
    
    public void receiveData(String data, Socket socket){
        OutputStream os = null;
        OutputStreamWriter osw = null;
        BufferedWriter bw = null;
        
        try{
            os = socket.getOutputStream();
            osw = new OutputStreamWriter(os);
            bw = new BufferedWriter(osw);
            // 클라이언트로부터 데이터를 보내기 위해 OutputStream 선언
            
            bw.write(data);            // 클라이언트로 데이터 전송
            bw.flush();
        }catch(Exception e1){
            e1.printStackTrace();
        }finally {
            try{
                bw.close();
                osw.close();
                os.close();
                socket.close();
            }catch(Exception e1){
                e1.printStackTrace();
            }
        }
    }    
}


◇ 클라이언트 출력 결과  / 소스



package client;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
 
public class SimpleClient{
 
    public static void main(String[] args) throws IOException{
        
        SimpleClient cm = new SimpleClient();
        cm.ClientRun("Message Test+++Message Test+++Message Test");
    }
 
    public void ClientRun(String data){
        
        Socket socket = null;
        OutputStream os = null;
        OutputStreamWriter osw =null;
        BufferedWriter bw = null;
        
        InputStream is =null;
        InputStreamReader isr = null;
        BufferedReader br = null;
        
        try{
            socket = new Socket("172.16.117.129", 4200);
            os = socket.getOutputStream();
            osw = new OutputStreamWriter(os);
            bw = new BufferedWriter(osw);            //서버로 전송을 위한 OutputStream
        
            is = socket.getInputStream();
            isr = new InputStreamReader(is);
            br = new BufferedReader(isr);        // 서버로부터 Data를 받음
            
            bw.write(data);
            bw.newLine();
            bw.flush();
            
            String receiveData = "";
            receiveData = br.readLine();        // 서버로부터 데이터 한줄 읽음
            System.out.println("서버로부터 받은 데이터 : " + receiveData);
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            try{
                bw.close();
                osw.close();
                os.close();
                br.close();
                isr.close();
                is.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }    
        
    }
    
}
반응형