マルチキャスト Javaプログラミング2

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