TCP는 스트림 통신 프로토콜이라고도 부르며, 양쪽의 소켓이 연결된 상태인 연결지향 프로토콜이다.
TCP 프로그래밍에서 가장 중요한 클래스는 java.net.ServerSocket과 java.net.Socket이다.
ServerSocket은 서버쪽에서 클라이언트의 접속을 대기하기 위해 반드시 필요한 클래스며,
Socket은 서버와 클라이언트가 통신하기 위해서 반드시 필요한 클래스다.
TCP방법을 이용해서 클라이언트와 서버가 통신하려면 양쪽에 Socket 객체가 있어야 한다.
ServerSocket server = new ServerSocket(10001);
Socket sock = server.accept();
무엇인가 대기하기 위해서 멈춰있는 메소드를 블로킹 메소드라고 한다.
클라이언트에서 Socket만 생성하면 내부적으로 알아서 접속이 일어나게 된다.
클라이언트에서 Socket객체가 성공적으로 생성되면, accept메소드는 Socket객체를 반환한다.
ServerSocket server = new ServerSocket("127.0.0.1", 1993);
소켓의 OutputStream을 통해서 전송할 수 있고 , 반대로 inputStream을 통해서 전송한 스트림을 읽을수 있다.
소켓을 종료하고 싶다면 close()를 이용하면 된다.
sock.close();
public static void main(String[] args){
서버 소켓 생성
ServerSocket server = new ServerSocket(xxxx);
accept() 메소드 실행해 클라이언트 접속 대기
Socket sock = server.accept();
아웃풋 스트림과 인풋스트림을 구한다.
OutputStream out = sock.getOutPutStream();
inputStream in = sock.getInputStream();
InputStream은 BufferReader 형식으로 변환하고 OutputStream은 PrintWriter 형식으로 변환
PrintWriter pw = new PrintWriter(new OutputStreamWriter(out));
BufferedReader br = new BufferedReader((new InputStreamReader(in));
}
serverSocket = new ServerSocket(xxxx);
무한히 반복되는 accept 처리
while(true){
Socket sock = server.accept();
EchoThread echoThread = new EchoThread(sock);
echoThread.start();
}
class EchoThread extends Thread{
public void run(){
try{
OutputStream out = sock.getOutPutStream();
inputStream in = sock.getInputStream();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(out));
BufferedReader br = new BufferedReader((new InputStreamReader(in));
}catch(Exception){
e.printstack
}
}
}