자바 의 Socket 서버 와 클 라 이언 트 통신 의 예
서버 쪽 을 시작 하고 포트 에 연결 요청 이 있 는 지 계속 들 을 수 있 도록 순환 합 니 다.그 다음 에 클 라 이언 트 를 실행 하고 클 라 이언 트 가 연결 요청 을 보 냅 니 다. 서버 감독 은 이번 요청 을 들 은 후에 클 라 이언 트 에 게 메 시 지 를 받 고 연결 이 구축 되 며 스 레 드 를 시작 하여 이번 요청 을 처리 한 다음 에 다른 요청 을 계속 순환 적 으로 감청 합 니 다.클 라 이언 트 가 문자열 을 입력 한 후 Enter 키 를 누 르 면 서버 에 데 이 터 를 보 냅 니 다.서버 에서 데 이 터 를 읽 은 후 클 라 이언 트 데 이 터 를 답장 합 니 다.이번 요청 이 완료 되 어 시 작 된 스 레 드 가 사 라 졌 습 니 다.클 라 이언 트 가 "OK" 이외 의 반환 데 이 터 를 받 으 면 연결 요청 을 다시 보 내 고 데 이 터 를 보 냅 니 다. 서버 는 이번 연결 을 위해 스 레 드 를 다시 시작 합 니 다.클 라 이언 트 가 받 은 반환 데이터 가 'OK' 일 때 까지 클 라 이언 트 가 종료 합 니 다.
서버 소스 코드:
클 라 이언 트 소스 코드:
package com.defonds.socket.begin;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static final int PORT = 12345;//
public static void main(String[] args) {
System.out.println(" ...
");
Server server = new Server();
server.init();
}
public void init() {
try {
ServerSocket serverSocket = new ServerSocket(PORT);
while (true) {
// ,
Socket client = serverSocket.accept();
//
new HandlerThread(client);
}
} catch (Exception e) {
System.out.println(" : " + e.getMessage());
}
}
private class HandlerThread implements Runnable {
private Socket socket;
public HandlerThread(Socket client) {
socket = client;
new Thread(this).start();
}
public void run() {
try {
//
DataInputStream input = new DataInputStream(socket.getInputStream());
String clientInputStr = input.readUTF();// , EOFException
//
System.out.println(" :" + clientInputStr);
//
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
System.out.print(" :\t");
//
String s = new BufferedReader(new InputStreamReader(System.in)).readLine();
out.writeUTF(s);
out.close();
input.close();
} catch (Exception e) {
System.out.println(" run : " + e.getMessage());
} finally {
if (socket != null) {
try {
socket.close();
} catch (Exception e) {
socket = null;
System.out.println(" finally :" + e.getMessage());
}
}
}
}
}
}
메모: Socket 출력 스 트림 데이터 방법 은 writeUTF 일 때 입력 스 트림 으로 관련 데 이 터 를 읽 으 려 면 readUTF 를 사용 해 야 합 니 다.그렇지 않 으 면 EOFException 이상 을 던 질 것 이다.구체 적 인 원인 은 문 후 링크 를 참고 하 세 요.
참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.