パッケージ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(); } } }