메인 서버
public class MainServer {
public static void main (String[] args)
{
try {
ServerSocket s_socket = new ServerSocket(8888);
//ServerSocktet 클래스로 객체(s_socket) 생성 (포트 넘버를 8888로 넣어줌 )
Socket c_socket = s_socket.accept ();
//ServerSocket 클래스의 객체인 s_socket 으로 "accept" 메소드를 호출한다.
//클라이언트가 해당 8888 포트로 연결을 시도한다면 accpet 메소드는 대기를 풀 고, 클라이언트와 연결시키는 Socket 클래스를 생성하여 반환하게 된다.
// 이 accpet 메소드가 하는 역할은 클라이언트가 들어오는 것을 대기하는 역할 //클라이언트가 8888 포트로 연결시도하면 accpet 메소드는 대기를 풀고, 클라이 언트와 연결시키는 "Socket" 클래스를 생성하여 반환하게 된다.
accept 메소드로부터 받은 "c_socket" 이 바로 클라이언트랑 1 : 1 연결된 소켓
OutputStream output_data = c_socket.getOutputStream();
String sendDataString = "Welcome to My Server";
output_data.write(sendDataString.getBytes());
s_socket.close() ;
c_socket.close();
} catch(IOException e ) {
}
}
}
간략 정리 )
- ServerSocket 으로 연결대기하다가 Client 가 연결을 시도하면 Socket 을 생성하여 해당 소켓으로 데이터를 주고 받는다.
물론 데이터는 스트림 형태로 주고 받을 수 있다.
요약 )
1. ServerSocket 은 클라이언트 연결 요청이 있을때까지 대기
2. 클라이언트가 연결요청이 있으면 ( port 를 통해서 8888 ) Socket 을 생성하여 연결시킴
3. 연결된 Socket 으로 데이터를 스트림형태로 주고 받음
클라이언트 서버
public class MainClient {
public static void main(String[] args ) {
try {
Socket c_socket = new Socket ( "192.168.0.2", 8888 ) ;
//Socket 객체를 생성하여 연결을 시도하는 부분
//연결할 ip 주소와 Port 번호를 매개변수로 넘겨주어야 해당 주소로 연결시도
InputStream input_data = c_socket.getInputStream();
byte[] receiveBuffer = new byte[100];
input_data.read(receiveBuffer);
System.out.println(new String(receiveBuffer));
c_socket.close();
}catch(IOException e ) {
}
}
}
댓글
댓글 쓰기