자바 의 Socket 서버 와 클 라 이언 트 통신 의 예

HelloWord 급 자바 소켓 통신 의 예통신 프로 세 스:
        서버 쪽 을 시작 하고 포트 에 연결 요청 이 있 는 지 계속 들 을 수 있 도록 순환 합 니 다.그 다음 에 클 라 이언 트 를 실행 하고 클 라 이언 트 가 연결 요청 을 보 냅 니 다. 서버 감독 은 이번 요청 을 들 은 후에 클 라 이언 트 에 게 메 시 지 를 받 고 연결 이 구축 되 며 스 레 드 를 시작 하여 이번 요청 을 처리 한 다음 에 다른 요청 을 계속 순환 적 으로 감청 합 니 다.클 라 이언 트 가 문자열 을 입력 한 후 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 이상 을 던 질 것 이다.구체 적 인 원인 은 문 후 링크 를 참고 하 세 요.
        
참고 자료
  • http://stackoverflow.com/questions/5489915/java-datainputstream-read-operations-throwing-exceptions
  • 좋은 웹페이지 즐겨찾기