자바 소켓 프로 그래 밍(3)서버 소켓

3387 단어 JaavvaaSSooc
손 문
서버 소켓
목록 9.2 는 서버 프로그램의 일부분 입 니 다.
목록 9.2 간단 한 서버 프로그램
/**
*감청 포트 와 HTML 문 서 를 제공 하 는 프로그램
*/
class SimpleWebServer {
public static void main(String args[])
{
ServerSocket serverSocket = null;
Socket clientSocket = null;
int connects = 0;
try
{
{
//서버 socket 만 들 기
serverSocket = new ServerSocket(80, 5);
while (connects < 5)
{
//연결 대기
clientSocket = serverSocket.accept();
//서비스 연결
ServiceClient(clientSocket);
connects++;
}
serverSocket.close();
}
catch (IOException ioe)
{
System.out.println("Error in SimpleWebServer: " + ioe);
}
}
public static void ServiceClient(Socket client)
throws IOException
{
DataInputStream inbound = null;
DataOutputStream outbound = null;
try
{
//IO 흐름 획득
inbound = new DataInputStream( client.getInputStream());
outbound = new DataOutputStream( client.getOutputStream());
//포맷 출력(응답 헤더 와 적은 HTML 문서)
StringBuffer buffer = PrepareOutput();
String inputLine;
while ((inputLine = inbound.readLine()) != null)
{
//HTTP 요청 의 끝 에 도달 하면 응답 보 내기
if ( inputLine.equals("") )
{
outbound.writeBytes(buffer.toString());
break;
}
}
}
finally
{
//지우 기
System.out.println("Cleaning up connection: " + client);
tln("Cleaning up connection: " + client);
outbound.close();
inbound.close();
client.close();
client.close();
}
}
서버 는 주동 적 으로 연결 을 만 드 는 것 이 아 닙 니 다.반대로 클 라 이언 트 의 연결 요청 을 수 동적 으로 듣 고 서 비 스 를 제공 합 니 다.서버 는 클래스 ServerSocket 으로 만 들 어 졌 습 니 다.아래 프로그램 은 서버 엔 드 socket 을 만 들 고 80 포트 에 연결 합 니 다.
ServerSocket serverSocket = new ServerSocket(80, 5);
첫 번 째 매개 변 수 는 서버 가 감청 할 포트 입 니 다.두 번 째 매개 변 수 는 선택 할 수 있 는.API 문서 에서 감청 시간 임 을 설명 하지만 전통 적 인 socket 프로그램 에서 두 번 째 매개 변 수 는 감청 깊이 입 니 다.한 서버 는 여러 개의 연결 요청 을 동시에 받 을 수 있 습 니 다.그러나 매번 하나만 처리 할 수 있 습 니 다.감청 더 미 는 대답 이 없 는 연결 요청 대기 열 입 니 다.위의 요청 은 마지막 다섯 개의 요청 을 처리 하기 위해 연결 을 만 듭 니 다.뒤의 매개 변 수 를 생략 하면 기본 값 은 50 입 니 다.
ServerSocket serverSocket = new ServerSocket(80, 5);
socket 이 연결 을 만 들 고 감청 을 시작 하면 들 어 오 는 연결 은 감청 더미 에 만들어 집 니 다.accetp()방법 으로 더미 에 있 는 연결 을 꺼 냅 니 다.
Socket clientSocket = serverSocket.accept();
이 방법 은 방문 자 와 대화 할 클 라 이언 트 연결 을 되 돌려 줍 니 다.서버 자체 가 대 화 를 만 들 수 없 는 반면 서버 socket 은 accept()방법 으로 새로운 socket 을 만 듭 니 다.서버 socket 은 여전히 열 리 고 새로운 연결 요청 을 배열 합 니 다.
클 라 이언 트 socket 과 마찬가지 로 다음 단 계 는 입력 과 출력 흐름 을 만 듭 니 다.
DataInputStream inbound = new DataInputStream( clientSocket.getInputStream() ); DataOutputStream outbound = new DataOutputStream( clientSocket.getOutputStream() );
일반적인 I/O 작업 은 새 스 트림 에서 사용 할 수 있 습 니 다.서버 응답 전에 클 라 이언 트 가 빈 줄 을 보 내 기 를 기다 리 고 있 습 니 다.세 션 이 끝 날 때 서버 가 스 트림 과 클 라 이언 트 socket 을 닫 습 니 다.대기 열 에 요청 하지 않 으 면 어떤 상황 이 발생 할 까요?그 방법 은 하나 가 오 기 를 기다 릴 것 입 니 다.이 동작 을 차단 이 라 고 합 니 다.accept()방법 은 호출 이 올 때 까지 서버 스 레 드 를 차단 합 니 다.5 개의 연결 처리 가 끝나 면 서버 가 종 료 됩 니 다.대기 열 에 있 는 모든 호출 이 취 소 됩 니 다.
모든 서버 는 다음 과 같은 기본 적 인 절차 가 있어 야 합 니 다.
1.서버 socket 을 만 들 고 감청 을 시작 합 니 다.
2.accept()방법 으로 새로운 연결 을 얻 습 니 다.
3.입 출력 흐름 을 만 듭 니 다.
4.기 존 프로 토 콜 에 세 션 을 생 성 합 니 다.
5.클 라 이언 트 흐름 과 socket 을 닫 습 니 다.
6.두 번 째 단계 로 돌아 가 거나 일곱 번 째 단계 로 돌아간다.
7.서버 소켓 을 닫 습 니 다.

좋은 웹페이지 즐겨찾기