Java 소켓 (소켓)은 일반적으로 "소켓"이라고도하며 IP 주소 및 포트를 설명하며 통신 체인의 핸들입니다. 응용 프로그램은 일반적으로 "소켓"을 통해 네트워크 요청을 요청하거나 답변합니다.
소켓을 사용하여 여러 클라이언트와 동일한 클라이언트 간의 커뮤니케이션을 실현합니다. 먼저 클라이언트는 서버에 연결하여 메시지를 보내고 서버는 메시지를 수신 한 후 메시지를 처리 한 다음 클라이언트에게 메시지를 완료 한 후 메시지로 회신합니다. 나는 모든 사람으로부터 배우고 함께 진전을 이루기를 희망하면서 내 자신의 생각을 통해 서버와 클라이언트가 구현 한 코드를 작성했습니다.
서버 코드
/** * Socket Server * 함수 설명 : * */public class server {/** * entry * * @param args * @throws ioexception */public static void main (string [] args)은 ioexception {// 단순화를 위해 int port = 8899; // 포트 8899 Servetocet Server = new를 정의합니다. serversocket (port); system.out.println ( "클라이언트 연결을 기다릴 때 ..."); while (true) {// 서버는 다른 소켓에서 연결 요청을 받으려고합니다. 서버의 수락 방법은 블록 소켓 소켓 = 서버 ();/*** 서버가 클라이언트의 연결 요청을 동기식으로 처리합니다. 클라이언트로부터 연결 요청을받을 때마다 * 다음 연결 요청을 처리하기 전에 먼저 현재 클라이언트와 통신해야합니다. 동시성이 더 많을 때 프로그램의 성능에 심각한 영향을 미칩니다. 이를 위해 클라이언트와의 통신에 대한 다음과 같은 비동기식 처리로 변경할 수 있습니다.* /// 소켓이 수신 될 때마다 새 스레드 (새 스레드 (소켓)). start ();} // server.close ();}* 스레드 클래스를 처리하는 스레드 클래스*/static class runbable runable em empless em empless em empless em emplic emplect em emplic em emplic em emplic em emplic em emplication runable runnable runnable runber runber runber runable class*/*** 스레드 클래스. 작업 (Socket Socket) {this.socket = socket;} @public void run () {try {handlersocket ();} catch (Exception e) {e.printstacktrace ();}}/** * 클라이언트와 통신 * * @throws ioexception */private void handlersocket () {// we supudishing and the we we we we we the the were a the we the suparing a we suparning a we suparting and the suparting a we and a wed InputStream 및 IT에서 클라이언트가 보낸 정보를 읽으십시오/*** 소켓의 입력 스트림으로부터 데이터를 수신 할 때 위와 같이 조금 읽는 것은 너무 복잡합니다. * 때로는 BufferedReader를 사용하여 한 번에 한 줄 씩 읽는 것으로 변경됩니다. * * BufferedReader의 읽기 라인 메소드는 한 번에 한 줄을 읽습니다. 이 방법은 차단됩니다. 이 프로그램은 데이터 라인을 읽을 때까지 계속 실행되지 않습니다. * 그렇다면 언제 읽기 라인이 줄을 읽을까요? READLINE 메소드는 라인이 읽히지 않았다고 생각하지 않으며 * 블로킹을 종료하고 프로그램이 계속 실행되도록합니다. * 따라서 BufferedReader의 readline을 사용하여 데이터를 읽을 때 해당 출력 스트림에 라인 브레이크를 작성해야합니다 (* 스트림이 끝난 후에 자동으로 표시되고 읽기 라인을 인식 할 수 있음). 라인이 끊어진 후에는 출력 스트림이 즉시 닫히지 않으면 플러시해야합니다. * 그러면 버퍼에서 데이터를 진정으로 작성할 수 있습니다. */bufferedReader br = new bufferedReader (new inputStreamReader (socket.getInputStream (), "utf -8"); StringBuilder sb = new StringBuilder (); String temp; int require; sb.append (temp.substring (0, index)); break;} sb.append (temp);} system.out.println ( "form client :" + socket.getport () + "] 메시지 내용 :" + sb.toString ()); // Reply Writer = new outputstreamWriter (socket.getOutsput stream (socket.getOut). "utf-8"); writer.write ( "hi,%d. 하늘이 밝고 공기가 밝고 공기가 깨끗하고 바람이 깨끗합니다!", socket.getport ())); writer.flush (); writer.close (); system.out.println ( "포트 :" + socket.getport () + "] 성공적으로 "); b.close (); socket.close ();}}}클라이언트 코드
import java.io.inputStreamReader; import java.io.outputStreamwriter; import java.io.Reader; import java.witer; import java.net.socket;/*** 소켓 클라이언트* 공공 설명 :* @uthor a verly and gly argring*/public classion 1.0*/public class {/** enterm*/* @eletply*/** enterm*/public classe 정적 void main (string [] args) {// 세 개의 클라이언트를 열고, 하나의 스레드는 (int i = 0; i <3; i ++)에 대한 클라이언트를 나타냅니다 (new runnable () {@override public void run () {testClient Client = testClientArpory.createClient (); string.sormat (이 주말 날씨! client.client.getlocalport ()); client.receive ();} catch (예외 e) {e.printstacktrace ();}}). start ();}}/*** 팩토리를 생성하는 {public static testclient excreats (public testclient factory {public static testclient createClient) () {127.0. 8899);}}/*** 테스트 클라이언트*/정적 클래스 테스트 클리어 {/*** 생성자* @Param 호스트 연결을 연결합니다* @Param 포트 서버의 해당 청취 포트* @throws 예외*/public testClient (문자열 호스트, 인트 포트) 예외 {// 서버와의 연결을 설정합니다. port); system.out.println ( "client [port :" + client.getlocalport () + "] 서버와 연결을 설정합니다 ...");} 개인 소켓 클라이언트; 개인 라이터;/** * 메시지 보내기 * @param msg * @throws 예외 */public void send (string msg) 예외 {// 연결을 설정 한 후 (writer에 데이터를 작성할 수 있습니다. new outputStreamWriter (client.getOutputStream (), "utf-8");} writer.write (msg); writer.write ( "eof/n"); writer.flush (); // 작성 후 System.out.println ( "client :" + client.getlocalport ()}); */public void leceper recept ()는 예외 {// reader reader reader를 읽습니다. reader reader = new inputStreamReader (client.getInputStream (), "UTF-8"); // 데이터를 10 초 클라이언트로 수신 할 시간을 설정합니다 .SetSotimeout (10 *1000); char [] chars = new Char [64]; int len; int len (len); reader.read (chars)! = -1) {sb.append (new String (chars, 0, len);} system.out.println ( "client :" + client.getlocalport () + "] 메시지가 수신 되었음, 내용이 수신되었습니다 :" + sb.tostring ()); reader.close ();다음으로 시뮬레이션하겠습니다.
1. 먼저 서버를 실행하십시오
2. 그런 다음 클라이언트를 실행합니다 (세 개의 클라이언트 요청 열기)
데모를 위해 서버에서 Eclipse 도구와 클라이언트의 Intellij 아이디어 도구를 사용합니다. 현재 콘솔에서 클라이언트가 인쇄 한 메시지를 볼 수 있습니다.
포트 번호는 클라이언트를 나타냅니다. 콘솔에서 서버에서 인쇄 한 메시지를 다시 살펴 보겠습니다.
요약
위의 것은 동일한 서버 코드에 연결하기 위해 여러 클라이언트를 구현하는 Java 프로그래밍 소켓에 대한이 기사의 모든 내용입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 회신합니다.