前ページの作品を送信と受信プログラム一つにまとめた例です。
下記で最初のリストが送信用、その次のmainがあるクラスが受信用です。
01
02
03
04
05
06
07
08
09
10 11
12
13
14
15
16
17
18
19
20 21
22
23
24
25
26
27
28
29
30 31
32
33
34
35
36
37
38
39
40 41
42
43
44
45
46
47
48
import java.net.*;//DatagramSocket、MulticastSocket 、InetAddress用 //import java.io.*; import java.awt.event.*; import java.awt.*; public class MultSndFrame extends Frame //メインパネル { TextArea txt = new TextArea(10,80);//テキストエリア生成 Button btn = new Button("送信");//ボタンを生成 InetAddress inet = InetAddress.getByName("239.192.0.0"); int portNumber = 49153;//ポート番号 MulticastSocket sendSocket = new MulticastSocket();//マルチキャスト送信用 public MultSndFrame() throws Exception{ this.setVisible(true); this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) {// System.exit(1); } } ); this.add(txt, BorderLayout.CENTER);//テキストエリアをフレームに追加 this.add(btn, BorderLayout.EAST);//ボタンをフレームに追加 this.pack();//フレームを適宜なサイズにパックする。 this.btn.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ try { String msg = MultSndFrame.this.txt.getText(); //msg = "ここはsから始まる学籍番号に変更" + msg; msg = "s123456" + msg; byte[] buf = msg.getBytes("MS932");//バイト列に変換 DatagramPacket packet; packet = new DatagramPacket(buf, buf.length, inet, portNumber); //IPアドレス、ポート番号も指定 sendSocket.send(packet);//送信 } catch(Exception err){ err.printStackTrace(); } } } ); } public static void main(String[] args) throws Exception { new MultSndFrame(); } }
01
02
03
04
05
06
07
08
09
10 11
12
13
14
15
16
17
18
19
20 21
22
23
import java.net.*;//DatagramSocket用 public class MultRecTest { public static void main(String[] args) throws Exception { byte[] buf = new byte[256]; int portNumber = 49153;//ポート番号 InetAddress inet = InetAddress.getByName("239.192.0.0");//★ MulticastSocket recSocket = new MulticastSocket(portNumber);//受信用ソケット recSocket.joinGroup(inet); //指定のマルチキャストアドレスのグループに参加★ DatagramPacket packet = new DatagramPacket(buf, buf.length); System.out.println("受信待機状態"); new MultSndFrame ();// 上記で定義したフレーム継承クラスを生成(フレームは、このmainと別スレッドで動作します。) for(;;){ recSocket.receive(packet);//受信& wait int len = packet.getLength();//受信バイト数取得 String msg = new String(buf, 0, len,"MS932");//受信バイト列のデコード System.out.print(packet.getAddress() + "より受信\n 『"); System.out.println(msg + "』:以上" + len + "byte を受信しました。"); if(msg.indexOf("end") != -1) break; } recSocket.close(); } }