JavaFXののUDPベースのプログラミング

コードは以下の通りです

  1つの パッケージ测试。
  2  
  3  インポートにjava.io.IOException。
  4  インポートjava.net.DatagramPacket。
  5  輸入java.net.InetAddress。
  6  インポートjava.net.MulticastSocket。
  7  インポートjava.text.SimpleDateFormatの。
  8  インポートjava.util.Date;
  9  インポートjava.util.Optional。
10  
11  インポートjavafx.application.Application。
12  インポートjavafx.event.ActionEvent。
13  インポートjavafx.scene.Scene。
14  インポートjavafx.scene.control.Alert;
15  インポートjavafx.scene.control.Button。
16  インポートjavafx.scene.control.ButtonType。
17  インポートjavafx.scene.control.ScrollPane。
18  インポートjavafx.scene.control.TextArea。
19  インポートjavafx.scene.control.TitledPane。
20  インポートjavafx.scene.layout.AnchorPane。
21  インポートjavafx.scene.layout.VBox。
22  インポートjavafx.stage.Stage。
23の 
24  パブリック クラス FX_UDPは延びアプリケーション{
 25      静的InetAddressのIA;
26      静的MulticastSocketのソケット。
27      静的のTextArea ta_1、ta_2。
28      パブリック 静的 ボイドメイン(文字列[]引数){
 29          のtry {
 30              、IA = InetAddress.getByName( "228.9.6.7" )。
31              ソケットは= 新しい MulticastSocketのを(6770 )。
32              socket.joinGroup(IA)。
33              FX_UDPのfu = 新しいFX_UDP()。
34              Private_recive C = FU。新しいPrivate_recive(ソケット)。
35             c.start();
 36          } キャッチ(IOExceptionをE1){
 37              のSystem.out.println( "マルチキャストアドレスが失敗した結合" );
 38である         }
 39          Application.launch();
 40      }
 41である     @Override
 42は     公共 ボイド(スタートステージS)スロー例外{
 で43          // メソッドTODOが自動的に生成されたスタブ     
44          / * メッセージレコード* / 
45          ta_1 = 新しい新規のTextArea();
 46である          ta_1.setPrefSize(400、200である);
 47         = Pane_infoのScrollPane 新しい新規のScrollPane(ta_1);
 48          TitledPane pane_01 = 新しい新 TitledPane( "伝言メモ" 、pane_info);
 49          / * 透過窓* / 
50          ta_2 = 新しい新規のTextArea();
 51である          ta_2.setPrefSize(400、100 );
 52のIS          =のScrollPane pane_send 新しい新規のScrollPane(ta_2)を、
 53である          TitledPane pane_02 = 新しい新 TitledPane( "透過窓" ;、pane_send)
 54である         / * 送信ボタンイベント* / 
55          ボタンbtn_send = 新しい新しいボタン( "送信");
 56は、          btn_send.setOnAction(:: btnSend);
 57である         / * 閉じるとボタンイベント* / 
58          ボタンbtn_close = 新しい新しいボタン( "閉じる" ;)
 59          btn_close.setOnAction(:: btnClose);
 60          / * ボタンのサイズは、* / 
61である          btn_send.setPrefSize(70、30 );
 62である          btn_close.setPrefSize(70、30 );
 63である         / * ボタンの位置* / 
64          AnchorPane.setTopAnchor(btn_close、350.0 );
 65         AnchorPane.setLeftAnchor(btn_close、100.0 )。
66          AnchorPane.setTopAnchor(btn_send、350.0 )。
67          AnchorPane.setLeftAnchor(btn_send、200.0 );
68          
69          のVBox VB = 新規のVBox(pane_01、pane_02)。
70          
71          AnchorPane apane = 新しいAnchorPane(VB、btn_send、btn_close)。
72          
73          シーンのシーン= 新しいシーン(apane)。
74          s.setScene(シーン)。
75          s.setHeight(500 )。
76          s.setWidth(420 )。
77         s.show();
 78      }
 79      / * 送信ボタンイベント* / 
80      公共 ボイドbtnSend(のActionEvent enent){
 81          のtry {
 82              列MSG = ta_2.getText();
 83              のDatagramPacket Pのは= 新しい新)(Msg.getBytes(のDatagramPacketのを、Msg.getBytes()長さ、IA、6770. );
 84              socket.send(P);
 85          } キャッチ(IOExceptionをE){
 86              // TODO自動生成されたcatchブロック
87              e.printStackTrace();
 88          }
 89     }
 90      公共 ボイドbtnClose(のActionEventイベント){
 91          アラートアラート= 新しいアラート(Alert.AlertType.CONFIRMATION)。
92          alert.setTitle( "退出" )。
93          alert.setHeaderText( "你是否要退出" )。
94          オプションの<ButtonType>結果= alert.showAndWait()。
95          であれば(result.get()== ButtonType.OK){
 96              はSystem.exit(0 );
97          } {
 98              event.consume()。
99          }
 100      }
101      クラス Private_reciveは延びスレッド{
 102          MulticastSocketのソケット。
103          公衆Private_recive(MulticastSocketのS){
 104              この .socket = S。
105          }
 106          @Override
 107          公共 ボイドラン(){
 108              バイト [] BUF = 新しい バイト [100 ]。
109              のDatagramPacket RECV = 新規のDatagramPacket(BUF、buf.length)。
110              日の日= 新しい日付();
111             SimpleDateFormat DF = 新しいてSimpleDateFormat( "YYYY-MM-DD HH:MM:SS" )。
112              のtry {
 113                  ながら){
 114                      socket.receive(RECV)。
115                      文字列str = 新しい文字列(recv.getData()、0 、recv.getLength())。
116                      ta_1.appendText(df.format(日)+ "\ n"は);
117                      ta_1.appendText(STR + "\ n" );
118                      }
 119              } キャッチ(IOExceptionをE1){
 120                 System.out.println( "受信に失敗しました" );
 121              }
 122          }
 123      }
 124 }

 

結果は:

おすすめ

転載: www.cnblogs.com/jdr-gbl/p/12022565.html