본문 바로가기
웹개발/Java

Java IO 패키지 정리 3 - socket 통신

by 인생여희 2021. 3. 17.

Java IO 패키지 정리 3 - socket 통신

 

자바 IO 패키지 예제 - git

자바 스레드 예제 - git

 

[1]서버소켓 예제

 

서버

 

package sec07.exam01.server_socket;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		
		ServerSocket serverSocket = null;
		
		
		
		try {
			
			//서버 소켓 객체 생성
			serverSocket = new ServerSocket();
			serverSocket.bind(new InetSocketAddress("localhost" , 5001));
			
			
			while(true) {
				System.out.println( "[연결 기다림]");
				
				//연결 수락 후 소켓 생성
				Socket socket = serverSocket.accept();
				InetSocketAddress isa = (InetSocketAddress)socket.getRemoteSocketAddress();
				
				
				System.out.println("[연결 수락함]" + isa.getHostName());
				
			}
			 
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//서버 소켓이 안닫혀 있으면 닫아준다.
		if(!serverSocket.isClosed()) {
			
			try {
				
				serverSocket.close();
				
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		
	}

}

/*
[연결 기다림]
[연결 수락함]localhost
[연결 기다림]
[연결 수락함]localhost
[연결 기다림]...
 */

 

클라이언트 

 

package sec07.exam01.server_socket;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;

public class ClientExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		
		Socket socket = null;
		
		try {
			//소캣 객체 생성
			socket = new Socket();
			
			System.out.println("[연결 요청]");
			
			//연결
			socket.connect(new InetSocketAddress("localhost" , 5001));
			
			System.out.println("[연결 성공]");
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

		//클라이언트 소켓이 안닫혔으면 
		if(!socket.isClosed()) {
			
			try {
				//클라이언트 소켓 닫기
				socket.close();
				
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}

}

/*
[연결 요청]
[연결 성공]
 */

 

 

[2] 서버와 클라이언트 데이터 주고 받기

 

 

서버 

 

package sec07.exam02.data_read_write;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerExample {

	public static void main(String[] args) {

		
		ServerSocket serverSocket = null;
		
		try {
			
			
			serverSocket = new ServerSocket();
			
			serverSocket.bind(new InetSocketAddress("localhost" , 5000));
			
			
			while(true) {
				
				System.out.println("- 연결 기다림..");
				
				Socket socket = serverSocket.accept();
				InetSocketAddress isa = (InetSocketAddress)socket.getRemoteSocketAddress();
				
				System.out.println("연결 수락함 : " + isa.getHostName());
			
				
				
				//읽기 - 1
				
				byte[] bytes = null;
				String message = null;
				
				//소켓으로 부터 입력 스트림 객체 생성
				InputStream is = socket.getInputStream();
				
				//읽은 데이터 담을 바이트 변수 생성
				bytes = new byte[100];
				
				//입력 스트림 읽기  - 100 바이트 씩
				int readByteCount =	is.read(bytes);
				
				//바이트를 문자로 변환
				message = new String(bytes, 0, readByteCount , "UTF-8");
				
				System.out.println("- 데이터 받기 성공 : " + message);
				
				
				
				//쓰기 - 2
				
				//소켓으로 부터 출력 스트림 객체 생성
				OutputStream os	= socket.getOutputStream();
				message = "hello client!";
				bytes = message.getBytes("UTF-8");
				os.write(bytes);
				
				
				//내보내기
				os.flush();
					
				
				is.close();
				os.close();
				
				socket.close();
				
			}
			
			
			
		} catch (IOException e) {
			
			e.printStackTrace();
		}
		
		
		
		if(!serverSocket.isClosed()) {
			
			try {
				serverSocket.close();
				
			} catch (IOException e) {
				
				e.printStackTrace();
			}
			
		}
		
	}

}


/*
 
- 연결 기다림..
연결 수락함 : localhost
- 데이터 받기 성공 : hi server!
- 연결 기다림..
연결 수락함 : localhost
- 데이터 받기 성공 : hi server - 안녕 서버!
- 연결 기다림..
 
 */


 

클라이언트 

 

package sec07.exam02.data_read_write;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;

public class ClientExample {

	public static void main(String[] args) {

		
		Socket socket = null;
		
		
		
		try {
			
			
			socket = new Socket();
			System.out.println( "[연결 요청]");
			socket.connect(new InetSocketAddress("localhost" , 5000));
			System.out.println( "[연결 성공]");
			
			
			//데이터 출력 준비
			byte[] bytes = null;
			String message = null;
			
			//소켓으로 부터 출력 스트림 생성
			OutputStream os = socket.getOutputStream();
			message = "hi server - 안녕 서버!";
			bytes = message.getBytes("UTF-8");
			
			//출력 스트림에 데이터 쓰기
			os.write(bytes);
			
			//데이터 내보내기
			os.flush();
			
			System.out.println("데이터 보내기 성공");
			
			
			
			//소켓으로 부터 입력 스트림 생성
			InputStream is = socket.getInputStream();
			
			bytes = new byte[100];
			
			//입력 스트림으로 부터 바이트 읽기 
			int readByteCount = is.read(bytes);
			
			//읽은 바이트 문자열로 변환
			message = new String(bytes, 0, readByteCount);
			
			System.out.println("데이터 받기 성공 : " + message);
			
		
			os.close();
			
			is.close();
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		//소켓 닫기
		if(!socket.isClosed()) {
			
			try {
				socket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		
	}

}

/*
[연결 요청]
[연결 성공]
데이터 보내기 성공
데이터 받기 성공 : hello client!
*/

 

참고

willbfine.tistory.com/413?category=835334