Java

[Java] 자바 네트워킹 socket 기본 코드 - Server/Client code

Razelo 2020. 12. 18. 10:51

클라이언트쪽 기본 코드 간단한 기본 예제이다. 

 

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",5001));//연결요청함. 
			System.out.println("[연결 성공]");
			
			//서버로 데이터 보내기 
			byte[] bytes = null;
			String message = null;
			OutputStream os = socket.getOutputStream();
			message = "Hello 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,"UTF-8");
			System.out.println("[데이터 받기 성공]: "+message);
			
			is.close();
			os.close();
			
			//socket.close(); 어차피 밑에서 닫게 되어있음. 
		}catch(Exception e) {
			e.printStackTrace();
		}
		
		if(!socket.isClosed()) {
			try {
				socket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}

 

서버 쪽 기본 코드이다. 

 

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",5001));
			while(true) {
				System.out.println("[연결 기다림]");
				Socket socket = serverSocket.accept(); //클라이언트의 연결요청을 수락하는 역할. 클라이언트가 연결요청하기 전까지는 대기 상태임. blocking
				InetSocketAddress isa = (InetSocketAddress)socket.getRemoteSocketAddress();
				System.out.println("[연결 수락함]" +isa.getHostName());
				
				//데이터 받고 보내기//클라이언트에서 데이터를 받음. 
				byte[] bytes = null;
				String message = null;
				InputStream is = socket.getInputStream();
				bytes = new byte[100];
				int readByteCount = is.read(bytes);//read는 클라이언트가 데이터를 보내기 전까지 대기상태임. 
				message = new String(bytes,0,readByteCount,"UTF-8");
				System.out.println("[데이터 받기 성공]: "+message);
				
				//데이터 보내기. 
				OutputStream os = socket.getOutputStream();
				message = "Hello Client";
				bytes = message.getBytes("UTF-8");
				os.write(bytes);		
				os.flush();
				System.out.println("[데이터 보내기 성공]");
				
				is.close();
				os.close();
				socket.close(); //연결을 끊겠다는 뜻. 
				
			}	
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		if(!serverSocket.isClosed()) {
			try {
				serverSocket.close(); //닫아준다. 
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
반응형