Socket 네트워크 프로 토 콜 중 하나

클 라 이언 트:Socket 은 보통'소켓'이 라 고도 부 릅 니 다.IP 주소 와 포트 를 설명 하 는 데 사 용 됩 니 다.쓸데없는 말 은 하지 않 습 니 다.이것 은 바로 네트워크 통신 과정 에서 점 의 추상 적 인 표현 입 니 다.특히 자바 는 패키지 자바.net 에서 두 가지 종류의 소켓 과 ServerSocket 을 제공 하여 각각 양 방향 으로 연 결 된 클 라 이언 트 와 서버 를 표시 합 니 다.이것 은 매우 잘 봉 인 된 두 종류 로 사용 하기에 매우 편리 하 다!
    다음은 먼저 Socketserver 의 종 류 를 서버 로 만 들 것 입 니 다.이 서버 는 다 중 스 레 드 체 제 를 실현 하고 특정한 포트 에서 여러 개의 고객 의 요 구 를 감청 할 수 있 습 니 다.고객 의 요구 가 있 으 면 Server 는 새로운 고객 에 게 서 비 스 를 제공 하 는 순종 서 비 스 를 만 들 고 자신 이 계속 감청 할 수 있 습 니 다.프로그램 에서 accept()는 차단 함수 입 니 다.차단 성 방법 이란 이 방법 이 호출 되면 고객 의 요청 을 기다 리 고 한 고객 이 시작 하고 같은 포트 에 연결 을 요청 할 때 까지 accept()는 고객 에 대응 하 는 Socket 을 되 돌려 줍 니 다.이때 고객 측 과 서비스 측은 모두 통신 에 사용 되 는 Socket 을 만 들 었 고 그 다음은 각 Socket 에서 각자 의 입력,출력 흐름 을 각각 열 었 다.
SocketServer 클래스,서버 구현:
package server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServer {
 ServerSocket sever;   
 
 public  SocketServer(int port){
        try{
            sever = new ServerSocket(port);
        }catch(IOException e){
            e.printStackTrace();
        }
    }
    
    public void beginListen(){
        while(true){
            try{
                final Socket socket = sever.accept();
                
                new Thread(new Runnable(){
                    public void run(){
                        BufferedReader in;
                        try{
                            in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
                            PrintWriter out = new PrintWriter(socket.getOutputStream());
                            while (!socket.isClosed()){
                                String str;
                                str = in.readLine();
                                out.println("Hello!world!! " + str);
                                out.flush();
                                if (str == null || str.equals("end"))
                                    break;
                                System.out.println(str);
                            }
                            socket.close();
                        }catch(IOException e){
                            e.printStackTrace();
                        }
                    }
                }).start();
            }catch(IOException e){
                e.printStackTrace();
            }
        }
    }
    
}

SocketClient 클래스,클 라 이언 트 구현:
package client;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketClient {
  static Socket client;
     
    public  SocketClient(String site, int port){
        try{
            client = new Socket(site,port);
            System.out.println("Client is created! site:"+site+" port:"+port);
        }catch (UnknownHostException e){
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    
    public String sendMsg(String msg){
        try{
            BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
            PrintWriter out = new PrintWriter(client.getOutputStream());
            out.println(msg);
            out.flush();
            return in.readLine();
        }catch(IOException e){
            e.printStackTrace();
        }
        return "";
    }
    public void closeSocket(){
        try{
            client.close();
        }catch(IOException e){
            e.printStackTrace();
        }
    }
    public static void main(String[] args) throws Exception{
        
    }
}

다음은 Socket 통신 테스트 하 러 왔 습 니 다!
 먼저 TestServer 클래스 를 실행 하고 서버 를 열 어 12345 포트 에서 감청 합 니 다!
package server;
public class TestServer {
 /**
  * @param args
  */
 public static void main(String[] argvs){
           SocketServer server = new SocketServer(1234);
           server.beginListen();
      }
}

 TestClient 클래스 를 다시 실행 합 니 다: 
package client;
public class TestClient {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
        SocketClient client = new SocketClient("127.0.0.1",1234);
        System.out.println(client.sendMsg("nimei1"));
        client.closeSocket();
        
        SocketClient client1 = new SocketClient("127.0.0.1",1234);
        System.out.println(client1.sendMsg("nimei1111"));
        client1.closeSocket();
        
        SocketClient client11 = new SocketClient("127.0.0.1",1234);
        System.out.println(client11.sendMsg("nimei11111111"));
        client11.closeSocket();
        
        SocketClient client111 = new SocketClient("127.0.0.1",1234);
        System.out.println(client111.sendMsg("nimei11111111111111111"));
        client111.closeSocket();
        
 }
}

출력 결 과 는 다음 과 같 습 니 다.
서버:
nimei1
nimei1111
nimei11111111
nimei11111111111111111

 
클 라 이언 트:
Client is created! site:127.0.0.1 port:1234
Hello!world!! nimei1
Client is created! site:127.0.0.1 port:1234
Hello!world!! nimei1111
Client is created! site:127.0.0.1 port:1234
Hello!world!! nimei11111111
Client is created! site:127.0.0.1 port:1234
Hello!world!! nimei11111111111111111

 

좋은 웹페이지 즐겨찾기