통신 총결산 중의 하나

서버는 네트워크에 클라이언트의 연결을 기다리는 포트를 개방하고 연결 후에 일정한 협의에 따라 클라이언트와 단일 또는 이중 통신을 할 수 있는 컴퓨터이다.따라서 간단한 서버를 구축하려면 일정한 포트를 개방하고 클라이언트에게 서버의 IP와 개방된 포트의 유형 번호를 알려야 한다.
서버를 구축할 때 새로운 클래스를 사용하여 서버의 대상,java를 만듭니다.net.ServerSocket, 생성된 문장은 다음과 같습니다.
     java.net.ServerSocket server = new java.net.ServerSocket(port);
그 중에서port는 int 형식의 값으로 이 서버 대상이 개방한 포트 번호를 표시합니다.컴퓨터에서 사용할 수 있는 포트 번호는 0~65535입니다. 한 포트는 한 프로그램에서만 사용할 수 있습니다. 그 중에서 1024개의 포트는 유명한 포트라고 하는데 보통 일부 컴퓨터에서 자주 사용하는 소프트웨어에 의해 사용됩니다.따라서 테스트 프로그램을 쓸 때 이 유명한 포트를 최대한 피해야 한다.
입력한 포트가 점용되거나 포트의 값이 사용 가능한 범위 내에 있지 않은 등 예측할 수 없는 상황이 존재하기 때문에 이 문장은trycatch 문장이나throws 키워드를 강제로 검출해야 합니다.
대상을 만든 후에 클라이언트가 연결될 때 accept () 방법으로 Socket 대상을 클라이언트 대상으로 받아야 합니다.이 문장은 클라이언트가 서버에 연결할 때 유효하기 때문에 이 문장을 막을 때 막힌 효과가 있습니다.클라이언트와 통신이 필요하기 때문에 Socket 대상에서 입력 출력 흐름 대상 (try catch 필요), getInputStream () 과 getOutputStream () 방법으로 관련 목적을 실현할 수 있습니다.
 
다중 스레드 서버
 
이상의 간단한 서버는 단일 라인의 서버이다. 즉, 한 클라이언트의 정보만 처리할 수 있고 다른 클라이언트의 연결은 이전의 클라이언트가 연결을 끊은 후에야 진행할 수 있다. 이것은 실제 응용에서 절대 안 된다.그래서 스레드 방법을 사용하면 서버가 다중 스레드를 실현할 수 있다.
 
 
try {
			ServerSocket server = new ServerSocket(9090);
			while (true) {
				Socket client = server.accept();
				ClientThread clientThread = new ClientThread(client);
				clientThread.start();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

public class ClientThread extends Thread {

	private Socket client;

	public ClientThread(Socket client) {
		this.client = client;
	}

	public void run() {
		clientRun();
	}

	private void clientRun() {
		try {
			while (true) {
				java.io.OutputStream outputStream = client.getOutputStream();
				String msg = "hello welcome to server!";
				outputStream.write(msg.getBytes());
				java.io.InputStream inputStream = client.getInputStream();
				String print = "";
				while (print != "bye") {
					print = readLine(inputStream);
					System.out.println(print);
				}

			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	private static String readLine(java.io.InputStream inputStream) {
		String print = null;
		InputStreamReader reader = new InputStreamReader(inputStream);
		BufferedReader bufferedReader = new BufferedReader(reader);
		try {
			print = bufferedReader.readLine();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return print;
	}
}


 
이상은 다중 스레드의 간단한 서버의 실현이다.문자열을 읽는 데 새 입력 흐름 대상인bufferedReader가 사용됩니다.
 
문자열 읽기
bufferedReader도 필터 흐름입니다. 이번에는 주로 bufferedReader의readline () 방법을 사용합니다. readline은 입력 흐름에서 바이트를 연속적으로 읽습니다. 리턴 문자가 멈추고 이전에 읽은 바이트를 문자열로 변환합니다. 그 인코딩은 플랫폼의 기본 인코딩 방식에 따릅니다.
이것은 사실상 자바 자체가 이전에 사용한 단일 바이트에서 문자열을 읽는 방법의 봉인 실현이다.
 
 

좋은 웹페이지 즐겨찾기