통신 총결산 중의 하나
서버를 구축할 때 새로운 클래스를 사용하여 서버의 대상,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은 입력 흐름에서 바이트를 연속적으로 읽습니다. 리턴 문자가 멈추고 이전에 읽은 바이트를 문자열로 변환합니다. 그 인코딩은 플랫폼의 기본 인코딩 방식에 따릅니다.
이것은 사실상 자바 자체가 이전에 사용한 단일 바이트에서 문자열을 읽는 방법의 봉인 실현이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 다중 스레드를 순차적으로 실행하는 몇 가지 방법 요약Java 다중 스레드를 순차적으로 실행하는 몇 가지 방법 요약 동료는 무심결에 이 문제를 제기하고 두 가지 방법을 직접 실천했다.물론 더 좋은 방법이 있을 거야. 방법 1 이런 방법은 비교적 흔히 볼 수 있는 해결 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.