Basic/Java

Java - networking

HappyWeasel 2019. 6. 9. 01:50

Server

package socket_test;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class server {
	public static void main(String[] arg) {
		//서버의 소켓 선언
		ServerSocket serverSocket = null;
		//서버에 연결 된 클라이언트 정보를 저장하기 위해 선언
		Socket socket = null;
		
		InputStream inputStream = null;
		DataInputStream datainputstream = null;
		
		OutputStream outputStream = null;	
		DataOutputStream dataoutStream = null;
		
		try {
			serverSocket = new ServerSocket(9000);
			//서버 소켓 포트 9000 선언
			System.out.println("Client accept ready");
			
			socket = serverSocket.accept();
			//서버와의 연결을 위해 소캣 오픈(대기중...)
			//클라이언트에서 연결 되면  클라이언트 정보를 리턴
			System.out.println("Client Acccept!");
			System.out.println("socket : " + socket);
			
			//받을 데이터 소켓에 연결
			inputStream = socket.getInputStream();
			datainputstream = new DataInputStream(inputStream);
			
			//보내줄 데이터 소켓에 연결
			outputStream = socket.getOutputStream();
			dataoutStream = new DataOutputStream(outputStream);
			
			while(true) {
				String clientMessage = datainputstream.readUTF();
				System.out.println("clientMessage : " + clientMessage);
				
				if (clientMessage.equals("STOP")) break;
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				//소켓들을 반납하기 위해 사용.
				if(datainputstream != null) datainputstream.close();
				if(inputStream != null) inputStream.close();
				if(dataoutStream != null) dataoutStream.close();
				if(outputStream != null) outputStream.close();
				if(socket != null) socket.close();
				if(serverSocket != null) serverSocket.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

}

 

결과

Client accept ready
Client Acccept!
socket : Socket[addr=/127.0.0.1,port=54165,localport=9000]
clientMessage : hi

 

 

Client

package socket_test;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class client {
	public static void main(String[] arg) {

		Socket socket = null;

		// 보낼 데이터
		OutputStream outputStream = null;
		DataOutputStream dataOutputStream = null;

		// 받을 데이터
		InputStream inputStream = null;
		DataInputStream datainputStream = null;

		// 사용자에게 데이터를 입력 받기 위한 Scanner 선언
		Scanner scanner = null;

		try {
			//접속할 소켓 정보 IP, Port
			socket = new Socket("localhost", 9000);

			//소켓에 보낼 데이터로 선언
			outputStream = socket.getOutputStream();
			dataOutputStream = new DataOutputStream(outputStream);

			//소켓에 받을 데이터로 선언
			inputStream = socket.getInputStream();
			datainputStream = new DataInputStream(inputStream);

			//스캐너 선언
			scanner = new Scanner(System.in);

			while (true) {
				System.out.println("Message : ");
				//메세지 입력 받음.
				String outMessage = scanner.nextLine();
				//UTF-8 형식으로 입력 받은 데이터 쓰기
				dataOutputStream.writeUTF(outMessage);
				// 데이터 보내기
				dataOutputStream.flush();
				
				// UTF-8 형식으로 데이터 받아오기.
				String inMessage = datainputStream.readUTF();
				// 데이터 출력.
				System.out.println("inMessagae : " + inMessage);
				
				if(outMessage.equals("STOP")) break;
			}

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (dataOutputStream != null) dataOutputStream.close();
				if (outputStream != null) outputStream.close();
				if (datainputStream != null) datainputStream.close();
				if (inputStream != null) inputStream.close();
				if (socket != null) socket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

결과

Message : 
hi