Javaの-UDPプログラミング

TCP / IP UDPはトランスポート層に基づいており、およびUDP送信データの損失の状況は、逃げるために、過去に送信され、データ受信が受信されない送信にかかわらず、相手の、発生します。

パケットにカプセル化されたソースおよび宛先データを、接続を確立していない(のDatagramPacketの)UDPがあります

各データのサイズが64Kの制限内で報告しました

何のつながり、信頼性のないプロトコルがありませんでしたので

接続速度を確立することなく、

我々は、次のコード生成のショーを書きますUDP

A、クライアント側

  

パブリック クラスUDPSocketClient { 
    
    公共 静的 ボイドメイン(文字列[]引数)がスローされたThrowable { 
    
            // 送信を(); 
        
            keySend(); 
    
    } 

    プライベート 静的 無効 keySend()スローのThrowable { 
         
        試み{ 
            
            // 1、创建UDP服务 
            DatagramSocketのソケット= 新しいのDatagramSocket(); 
            
            BufferedReaderのリーダー = 新しい BufferedReaderの(新しいInputStreamReaderの(System.in))。
            
             文字列メッセージ = NULL ; 
            
            同時に((メッセージ= reader.readLine())!= nullの){ 
                
                
                IF(message.equals( "886" ))   
                 
                    BREAK ; 
                
                // 2、カプセル化パケット                     
                のDatagramPacketの=送る新新のDatagramPacketの(message.getBytes()、message.getBytes ().LENGTH、InetAddress.getByName( "ローカルホスト")、8088 );
                 // 3ブロック、送信データ
                 socket.send(送信); 
            } 
            // 4、リソースの解放。
            Socket.close(); 
            
        } キャッチ(EのSocketException ){
             // TODO自動生成されたブロックキャッチ
            e.printStackTrace(); 
        }
        
    }

二、サーバー終了

パブリック クラスUDPSocketServer { 
    
    公共 静的 ボイドメイン(文字列[]引数)がスローされたThrowable {
         // ;)(受信
        Keyreceive(); 
    } 

    プライベート 静的 ボイド Keyreceive()スローされたThrowable { 
         
        // 。1、および指定されたポートを作成し、UDPソケット 
        DatagramSocketのソケット=を新しい新規のDatagramSocket(8088 ); 
        
        一方、真の){
              // 2、受信すべきデータパケットを定義する
             バイト []バイト= 新しい新しい バイト [1024 ];
             DatagramPacketパケット = 新規のDatagramPacket(バイト、bytes.length)。
             socket.receive(パケット)。// 阻塞式 
             文字列メッセージ= 新しい文字列(packet.getData()、0 。、packet.getData()の長さ)。
             System.out.println( "サーバー收到的消息为:" + メッセージ)。
        } 
        
         
    } 
}

第三に、テスト結果。

まず、サーバー側を起動し、クライアントを開きます

クライアントがメッセージを送信します

 

サーバーは、メッセージを受信します

 

 マルチスレッドチャット

まず、クライアント

パブリック クラス UDPSocketClientThread 実装Runnableを{ 
    
    プライベートのDatagramSocket DatagramSocketの。
    公共UDPSocketClientThread(DatagramSocketのDatagramSocketの){
         この .datagramSocket = たDatagramSocket。
    } 

    @Override 
    公共 ボイドラン(){ 
        
        BufferedReaderのリーダー = 新しい BufferedReaderの(新しいInputStreamReaderの(System.in))。
        
         文字列メッセージ = NULL ; 
        
        してみてください{
             しばらく((メッセージ= reader.readLine())!= nullの){ 
                
                場合(message.equals( "886" ))   
                 
                    休憩
                
                // 2、发送数据 
                のDatagramPacket送信= 新規のDatagramPacket(message.getBytes()、message.getBytes()長さ、InetAddress.getByName( "192.168.43.255")、8088。 )。
                // 阻塞式
                この.datagramSocket.send(送信)。
            } 
        } キャッチ(UnknownHostExceptionが電子){ 
            
            e.printStackTrace(); 
        } キャッチ(IOExceptionを電子){ 
            
            e.printStackTrace(); 
        } 
    } 
    
}

第二に、サーバー

パブリック クラス UDPSocketServerThread 実装Runnableを{ 
    
    DatagramSocketのソケット。
    
    公共UDPSocketServerThread(DatagramSocketのソケット){
         この .socket = ソケット。
    } 
 

    @Override 
    公共 ボイドラン(){ 
        
        一方){
              // 2、定义数据要接收的报文
             バイト []バイト= 新しい バイト [1024 ]; 
             DatagramPacketパケット = 新規のDatagramPacket(バイト、bytes.length)。
             してみてください {
                (パケット)socket.receive。
            } キャッチ(IOExceptionを電子){
                 // TODO自動生成されたcatchブロック
                e.printStackTrace(); 
            } // 阻塞式 
             文字列メッセージ= 新しい文字列(packet.getData()、0 、packet.getData()の長さ。); 
             InetAddressのInetAddress = nullを試す{ 
                InetAddressの = のInetAddress.getLocalHost()。
                 System.out.println(inetAddress.getHostAddress() + "的消息为:" + メッセージ)。
            } キャッチ(UnknownHostExceptionが電子){
                 // TODO自動生成されたcatchブロック
                e.printStackTrace(); 
            } 
            
        } 
        
    } 
 
}

第三に、テスト実行

パブリック クラスUDPSocketRun { 
    
    公共 静的 ボイドメイン(文字列[]引数)がスローされたThrowableを{ 
        たDatagramSocket送信 = 新しいDatagramSocketの()。
        DatagramSocketのは、受信 = 新しいのDatagramSocket(8088 );
        新しいスレッド(新しいUDPSocketClientThread(送信))(開始)。
        新しいスレッド(新しい  UDPSocketServerThread(受信)))(開始。
    } 
}

 

 

おすすめ

転載: www.cnblogs.com/hellohero55/p/11992788.html