[UDPウィンドウにマルチスレッディング、同時送受信によって改善]

パッケージcom.yjf.esupplier.common.test; 

インポートjava.net.DatagramSocket;
 インポートjava.net.SocketExceptionが; 

/ ** 
 * @author Shusheng 
 *の@descriptionウィンドウでマルチスレッド、同時送受信することにより改善
 * @ [email protected]メールで
 *の@date 2019年1月10日23:12 
 * / 
パブリック クラスチャットルーム{ 

    公共 静的 ボイドメイン(文字列[]引数)スローのSocketException { 

        たDatagramSocket dsSend = 新しい新規のDatagramSocket(); 
        たDatagramSocket dsReceive = 新しい新規のDatagramSocketを( 12306 );

        SendThread ST = 新しいSendThread(dsSend)。
        ReceiveThread RT = 新しいReceiveThread(dsReceive)。

        スレッドT1 = 新しいスレッド(ST); 
        スレッドT2 = 新しいスレッド(RT); 

        t1.start(); 
        t2.start(); 
    } 

}
パッケージcom.yjf.esupplier.common.test。

インポートにjava.io.IOException;
輸入java.net.DatagramPacket。
インポートjava.net.DatagramSocket;
輸入java.net.InetAddress;
インポートjava.util.Scanner; 

/ ** 
 * @authorのshushengの
 *の@description 
 * @email [email protected] 
 * @date 2019年1月10日23:16 
 * / 
パブリック クラス SendThreadを実装したRunnable { 

    プライベートたDatagramSocketソケットを、

    公共SendThread(DatagramSocketのソケット){
         この .socket = ソケット。
    }

    @Override 
    公共 ボイドラン(){
         しようと{ 
            文字列の行 = ヌル;
            一方、){ 
                スキャナスキャン = 新しいスキャナ(System.in)。 = scan.nextLine()。
                もし(line.equals( "出口" )){
                     ブレーク
                } 
                バイト []バイト= )(line.getBytesします。
                DatagramPacketパケット = 新しいですDatagramPacket(line.getBytes()、line.getBytes()長さ、InetAddress.getByName( "ローカルホスト")、12306。 )。
                socket.send(パケット)。
            } 
            socket.close()。
        } キャッチ(IOExceptionを電子){ 
            e.printStackTrace(); 
        } 
    } 

}
パッケージcom.yjf.esupplier.common.test。

インポートにjava.io.IOException;
輸入java.net.DatagramPacket。
インポートjava.net.DatagramSocket; 

/ ** 
 * @authorのshushengの
 *の@description 
 * @email [email protected] 
 * @date 2019年1月10日23時27分
 * / 
パブリック クラス ReceiveThreadを実装したRunnable {
     プライベートたDatagramSocketソケットを、

    公共ReceiveThread(DatagramSocketのソケット){
         この .socket = ソケット。
    } 

    @Override 
    公共 ボイドラン(){
        トライ{
             一方真の){
                 // パッケージ作成
                バイト [] = BYS 新しい新しい バイト [1024 ]; 
                のDatagramPacket DPの = 新しい新規のDatagramPacketの(BYS、bys.length); 

                // データ受信
                Socket.Receive(DP)を;
                 // 解析データ 
                文字列IP = dp.getAddress()はgetHostAddress();. 
                文字列S = 新しい新しい文字列(dp.getData()、0 、dp.getLength()); 
                のSystem.out.println( "から" + IP +「データであります:「+ S)。
            } 
        } キャッチ(IOExceptionを電子){ 
            e.printStackTrace(); 
        } 
    } 

}

 

おすすめ

転載: www.cnblogs.com/zuixinxian/p/11275396.html