네트워크 프로그래밍 학습 ----(2) UDP 모드에서 데이터의 전송과 수용을 실현하다

4747 단어
1 IP 주소: Java 클래스의 InetAddress 대상 2 TCP와 UDP 3 Socket 4 UDP 모드에서 데이터의 전송과 수용 5를 멀티스레드와 결합하여 채팅 기능을 실현한다.
1 IP 주소: Java 클래스의 InetAddress 객체
InetAddress에 대한 간단한 작업
public static void UDPPartern_IP(){
        try {
            InetAddress ip = InetAddress.getLocalHost();//    IP  
            System.out.println(ip.getAddress());
            System.out.println(ip.getHostAddress());//IP  
            System.out.println(ip.getHostName());//    
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }

2 TCP 및 UDP
2.1 UDP
1 데이터 및 소스 및 목적을 패킷으로 캡슐화할 필요가 없음 2 패킷의 크기를 64K 이내로 제한할 필요가 없음 3연결이 필요 없음 신뢰할 수 없음 프로토콜 4연결이 필요 없음 빠른 속도
2.1 TCP
1 연결을 구축하여 데이터를 전송하는 통로를 형성한다.2 연결 중 빅데이터 양 전송.3 세 번의 핸드셰이크를 통해 연결이 완료되므로 신뢰할 수 있는 프로토콜4 연결이 필요하며 효율성이 약간 떨어집니다.
3 Socket
Socket은 인터넷 서비스를 위한 일종의 서비스 메커니즘으로 통신 양쪽에 모두 Socket이 있다.네트워크 통신은 사실 Socket 간의 통신 데이터가 두 Socket 간에 IO를 통해 전송되는 것이다
4 UDP 모드에서 데이터 전송 및 수용
코드는 다음과 같습니다. 송신자가 데이터를 보냅니다.
 public static void UDPPartern_send(){
        try {
            //1   UDP  .  DatagramSocket  
            DatagramSocket ds = new DatagramSocket();
            //2     ,         
            byte[] buf = "udp ge men lai le".getBytes();
               //           1234  
            DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName(InetAddress.getLocalHost().getHostAddress()),1234);
            //3     
            ds.send(dp);
            //4     
            ds.close();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

수용자 수용 데이터:
public static void UDPPartern_receive(){
        try {
            //1   UDP  .  DatagramSocket  
            DatagramSocket ds = new DatagramSocket(1234);
            //2     ,         
            byte[] buf = new byte[1024];
            DatagramPacket dp = new DatagramPacket(buf,buf.length);
            //3     
            ds.receive(dp);
            System.out.println("addressName"+dp.getAddress().getHostAddress());
            String data = new String(dp.getData(),0,dp.getLength());
            System.out.println("data"+data);
            //4     
            ds.close();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

5 멀티스레드와 채팅 기능 결합
계속 확장하면 발송과 수신을 각각 하나의 라인으로 하고 두 개의 라인을 켜면 하나는 키보드를 읽고 데이터를 입력하여 발송하고 다른 하나는 발송 데이터를 받아들이는 것을 책임진다.코드는 다음과 같습니다. 송신자:
public class Socket_send implements Runnable{

    private DatagramSocket ds;


    public Socket_send(DatagramSocket ds){
        this.ds = ds;
    }

    @Override
    public void run() {
        try {
            //2     ,         
            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

            String line = null;

            while((line = bf.readLine())!=null){
                if("886".equals(line)){
                    break;
                }
                byte[] buf = line.getBytes();

                DatagramPacket dp = new DatagramPacket(buf, buf.length,InetAddress.getByName(InetAddress.getLocalHost().getHostAddress()),12002);

                ds.send(dp);
               //        。     Socket   (                   ),        ,     
            }
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

수신자:
public class Socket_receive implements Runnable{

    private DatagramSocket ds;

    public Socket_receive(DatagramSocket ds){
        this.ds = ds;
    }

    @Override
    public void run() {
        while(true){
            try {
                //2     ,         
                byte[] buf = new byte[1024];
                DatagramPacket dp = new DatagramPacket(buf,buf.length);
                //3     
                ds.receive(dp);
                System.out.println("addressName:  "+dp.getAddress().getHostAddress());
                String data = new String(dp.getData(),0,dp.getLength());
                System.out.println("data:  "+data);
                //        。     Socket   (                   ),        ,     
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

위 프로그램은 어떤 IP 주소 아래의 어떤 포트를 감청함으로써 정보의 발송과 수신을 실현한다. 채팅 기능의 기초는 바로 이것에 기초한 것이다!또한 자신이 배운 지식을 적시에 활용하는 것이 중요하다!
END

좋은 웹페이지 즐겨찾기