前ページの作品を送信と受信プログラム一つにまとめた例です。
下記で最初のリストが送信用、その次の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();
}
}