이 기사에서는 참조를위한 간단한 인사 서비스를 구현하기위한 Java 소켓 프로그래밍의 자세한 코드를 설명합니다. 특정 내용은 다음과 같습니다
서버 측 :
가장 간단한 Hello 서비스를 구현하고 클라이언트 IP 주소를 콘솔에 인쇄하고 연결된 클라이언트에 문자열 (Hello, Java 소켓)을 보내고 클라이언트와의 연결을 닫습니다. 다음 고객의 연결 요청이 도착하기를 기다립니다.
고객:
Hello Server에 연결하기 위해 가장 간단한 소켓을 구현하고 서버에서 전송하는 바이트 데이터를 허용하고 콘텐츠를 콘솔에 인쇄합니다.
주요 팁 :
Java는 많은 입력 및 출력 스트림 API를 제공하기 때문에 많은 초보자가 Java 소켓 프로그래밍에 노출되며 네트워크 바이트 통신의 특성에 대한 이해가 부족하기 때문에 readline ()을 통해 소켓 바이트 스트림을 직접 허용합니다. 그러나 보내는 당사자는 /r /n을 보내지 않기 때문에 데이터를 읽을 수 없습니다. 이것은 가장 일반적인 오류입니다. 다른 일반적인 실수로는 수락 버퍼를 초기화하지 않고, 문자가 많이 발생하고, 읽는 바이트의 수에 따라 재 조립되지 않아 수신 된 데이터를 예외적으로 만듭니다. 따라서 코드는 바이트가 전송하고 바이트가 수락 한 내용을 보여줍니다. 이것은 네트워크 프로그래밍에서 매우 중요한 개념과 원칙입니다. 입력 스트림 println () 메소드와 출력 스트림 읽기 라인 () 메소드가 지옥으로 이동하도록하십시오. 사용하기 쉽지는 않지만 네트워크 프로그래밍의 본질에 대한 이해와 이해를 방해하기 때문에 사용하지 않는 것이 좋습니다. 또한, 특별한 메모를 만들고 싶습니다 : 버퍼링 된 입력 및 출력 스트림을 사용하여 바이트를 읽고 쓰지 않으면 때때로 Flush ()가 필요하지 않습니다.
서버 측 코드 :
패키지 com.gloomyfish.socket.tutorial.two; import java.io.dataOutputStream; import java.io.ioexception; import java.net.serversocket; import java.net.socket; 공개 클래스 HelloService 확장 스레드 {private serversocket serversocket; public helloService (int port)는 ioException {serversocket = new serversocket (port); } public void run () {try {while (true) {system.out.println ( "포트에서 클라이언트 대기" + serversocket.getlocalport ()); 소켓 클라이언트 = serversocket.accept (); // 소득 소켓 시스템 차단 및 대기 중. out.println ( "그냥 연결된" + client.getRemotesocketAddress ()); dataOutputStream dos = 새로운 dataOutputStream (client.getOutputStream ()); 바이트 [] hello = "hello, java socket".getBytes (); dos.write (hello, 0, hello.length); dos.close (); client.close (); }} catch (예외 e) {e.printstacktrace (); }} public static void main (String [] args) {try {helloService service = new HelloService (9999); service.start (); } catch (ioexception e) {e.printstacktrace (); }}} 이 서버는 포트 9999에서 자리를 듣고 연결을 기다리고 Java 스레드를 사용하여 서버 측 시작을 달성합니다.
클라이언트 코드는 다음과 같습니다.
패키지 com.gloomyfish.socket.tutorial.two; import java.io.datainputstream; import java.io.ioexception; import java.net.inetSocketAddress; import java.net.socketAddress; import java.net.socketAddress; 공개 클래스 helloclient {private int clientNumber; 비공개 소켓 드레스 주소; public helloclient (int clientnum) {clientnum = clientnum; } public void setupclients (String ServerHostName, int port) IoException {address = new inetSocketAddress (ServerHostName, Port); for (int i = 0; i <clientNumber; i ++) {system.out.println (); System.out.println ( "시작 클라이언트 번호" + (i + 1)); 소켓 소켓 = 새로운 소켓 (); socket.connect (주소); datainputStream bufferedReader = new datainputStream (socket.getInputStream ()); 바이트 [] cbuff = 새로운 바이트 [256]; char [] charbuff = new char [256]; int size = 0; while ((size = bufferedReader.Read (cbuff))> 0) {ConvertByTeTochar (cbuff, charbuff, size); System.out.println (charbuff); } bufferedReader.close (); socket.close (); }} private void convertByteTochar (byte [] cbuff, char [] charbuff, int size) {for (int i = 0; i <charbuff.length; i ++) {if (i <size) {charbuff [i] = (char) cbuff [i]; } else {charbuff [i] = ''; }}} public static void main (String [] args) {try {helloclient client = new HelloClient (10); client.setupclients ( "localhost", 9999); } catch (ioexception e) {e.printstacktrace (); }}} 서버 측에 연결하려면 10 개의 클라이언트를 시작하고 서버 인사말을 수신 한 후 클라이언트가 연결을 닫습니다.
특별 팁 : 버퍼 charbuff를 초기화하십시오
프로그램 실행 결과 :
위의 내용은이 기사에 관한 모든 것입니다. 모든 사람의 학습에 도움이되기를 바랍니다.