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

반응형



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();
            }
        }    
        
    }
    
}
반응형