Java 네트워크 프로그래밍 기본 자습서의 Socket 시작 사례

우리가 자바에서 TCP/IP를 사용하여 네트워크를 통해 서버에 연결하려면 자바를 만들어야 합니다.net.Socket 객체를 서버에 연결합니다.Java NIO를 사용하려는 경우 Java NIO의 SocketChannel 객체를 만들 수도 있습니다.
Socket 만들기
다음 예제 코드는 IP 주소 78.64.84.171 서버에 연결된 80 포트입니다. 이 서버가 바로 저희 웹 서버입니다.80포트는 웹 서비스 포트입니다.

Socket socket = new Socket("78.46.84.171", 80);
다음과 같이 IP 주소 대신 도메인 이름을 사용할 수도 있습니다.

Socket socket = new Socket("jb51.net", 80);
Socket 전송 데이터
Socket을 통해 데이터를 보내려면 Socket의 출력 흐름(OutputStream)을 가져와야 합니다. 예제 코드는 다음과 같습니다.

Socket socket = new Socket("jb51.net", 80);
OutputStream out = socket.getOutputStream();

out.write("some data".getBytes());
out.flush();
out.close();

socket.close();

코드는 매우 간단하지만 네트워크를 통해 데이터를 서버에 전송하려면flush () 방법을 호출하는 것을 잊지 마십시오.운영 체제 하부의 TCP/IP 구현은 먼저 데이터를 더 큰 데이터 캐시 블록에 넣고, 캐시 블록의 크기는 TCP/IP의 패키지 크기에 부합된다.(번역자 주:flush () 방법을 호출하는 것은 운영체제 캐시에 데이터를 기록하는 것일 뿐, 데이터가 즉시 발송될 것이라고 보장하지 않습니다)
Socket 읽기 데이터
Socket에서 데이터를 읽으려면 다음과 같은 코드로 Socket의 입력 흐름(InputStream)을 가져와야 합니다.

Socket socket = new Socket("jb51.net", 80);
InputStream in = socket.getInputStream();

int data = in.read();
//... read more data...

in.close();
socket.close();

코드도 복잡하지 않지만, 주의해야 할 것은 Socket의 입력 흐름에서 데이터를 읽으면 파일을 읽을 수 없다는 것이다. 그러므로,read () 방법을 계속 호출해서 -1로 돌아갈 때까지 호출한다. 왜냐하면 Socket의 경우 서버가 연결을 닫을 때만 Socket의 입력 흐름이 -1로 되돌아갈 수 있기 때문이다. 사실상 서버는 끊임없이 연결을 닫지 않기 때문이다.만약 우리가 연결을 통해 여러 개의 요청을 보내고 싶다면, 이런 상황에서 연결을 닫는 것은 매우 어리석어 보인다.
따라서 Socket의 입력 흐름에서 데이터를 읽을 때 우리는 읽어야 할 바이트 수를 알아야 한다. 이것은 서버가 데이터에서 얼마나 많은 바이트를 보냈는지 알려줌으로써 실현할 수 있고, 데이터 끝에 특수한 문자 표시를 설정하는 방식으로 연결할 수 있다.
소켓 닫기
Socket을 사용한 후에 Socket을 닫고 서버와의 연결을 끊어야 합니다.Socket을 끄려면 Socket만 호출해야 합니다.close() 메서드는 다음과 같습니다.

Socket socket = new Socket("jb51.net", 80);

socket.close();

(전문 끝)

좋은 웹페이지 즐겨찾기