UDPマルチキャストチャット 空川幸司
前回までのあらすじ TCPとUDPの違い FTPサーバについての勉強
スライド一覧 パケットの配送方式の説明 UDPパケット送信プログラム UDPパケット受信プログラム プログラムの実行画面 プログラムの主要部分の説明 参考文献
ユニキャスト
マルチキャスト
UDPパケット送受信プログラム ポート番号 10007 マルチキャストアドレス 224.0.0.1 クラスDアドレス ポート番号 10007 マルチキャストアドレス 224.0.0.1 クラスDアドレス 上位4ビットが“1110”で始まる 224.0.0.0~239.255.255.255 そのうち224.0.0.0~224.0.0.255はTTLが1に設定されて送信されるのでルータによって転送されることがない
import java. net. ; import java. io import java.net.*; import java.io.*; public class MulticastSender { public static void main(String args[]) { int PORT = 10007; String multicastAddress = “224.0.0.1”; byte[] buf = new byte[1024]; try { MulticastSocket socket = new MulticastSocket(PORT); InetAddress chat = InetAddress.getByName(multicastAddress); socket.joinGroup(chat); BufferedReader keyIn = new BufferedReader(new InputStreamReader(System.in)); 送信プログラムその1
String message; while ((message = keyIn. readLine()) String message; while ((message = keyIn.readLine()).length() > -1) { byte[] bytes = message.getBytes(); DatagramPacket packet = new DatagramPacket(bytes,bytes.length,chat,PORT); socket.send(packet); if(message.equals("quit")) { MyException e = new MyException(); throw e; } } } catch (Exception e){} } } class MyException extends Exception { MyException() { System.out.println("接続終了"); } } その2
import java.net.*; import java.io.*; public class MulticastReceiver { public static void main(String args[]) { int PORT = 10007; String multicastaddress = “224.0.0.1”; byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf,buf.length); try { MulticastSocket socket = new MulticastSocket(PORT); InetAddress chat = InetAddress.getByName(multicastaddress); socket.joinGroup(chat); System.out.println(“MulticastRecieverを起動しました”); 受信プログラムその1
while(true) { socket.receive(packet); String message = new String(buf,0,packet.getLength()); System.out.println(packet.getSocketAddress()+ “:”+message); if(message.equals(“quit”)) { System.out.println(“相手が接続を終了しました”); } } }catch (Exception e) { System.out.println(e); } } } その2
送信画面(150.43.244.114) 受信画面
送信画面(150.43.244.122) 受信画面
InetAddress chat = InetAddress.getByName(multicastaddress) MulticastSocket socket = new MulticastSocket(PORT) マルチキャストソケットの作成にはポート番号を指定 Socket.joinGroup(chat) 作成したマルチキャストソケットとjoinGroupメソッドを使って、マルチキャスト通信に参加
DatagramPacket packet = new DatagramPacket(bytes,bytes DatagramPacket packet = new DatagramPacket(bytes,bytes.length,chat,PORT); Socket.send(packet); このUDPデータグラムをsendメソッドでマルチキャストソケットに送ります DatagramPacket packet = new DatagramPacket(bytes,bytes.length); socket.receive(packet); 受信の場合は受け取る準備をするので 受け皿を用意し、receiveメソッドを使って受信します
次にやっていくこと GUIでの機能の追加 オブジェクト指向でのプログラミング チャットソフトとして機能できるように作る
参考文献・サイト 基礎からわかるTCP/IP Javaネットワークプログラミング 第2版 小高知宏 TECHSCORE http://www.techscore.com/index.html
ご清聴ありがとうございました