distributed sysytemsのブログ

distributed sysytemsのブログ

ブログの説明を入力します。

Amebaでブログを始めよう!
前回の続き、UDPについて、シンプルなサンプルを作成しましてので、参加まだに、目を通してください。
まず、同じように、サーバ側から作り始める。
TCPと違い、UDPの場合ではDatagramSocket、DatagramPacketというクラスを使用する。

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class Server_UDP {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
DatagramSocket server = new DatagramSocket(5000);
byte [] recevieBuffer = new byte[100];
DatagramPacket recvPacket = new DatagramPacket(recevieBuffer, recevieBuffer.length);
System.out.println("サーバ起動");
server.receive(recvPacket);

String recvString = new String(recvPacket.getData(), 0 , recvPacket.getLength());
// System.out.println("Hello world!");
System.out.println("クライアントからの返信:"+recvString);

int port = recvPacket.getPort();
InetAddress address = recvPacket.getAddress();
String sendString = "Hello I am server!";
byte [] sendbuffer;
sendbuffer = sendString.getBytes();
DatagramPacket senDatagramPacket = new DatagramPacket(sendbuffer, sendbuffer.length, address, port);
server.send(senDatagramPacket);
server.close();


}

}

クライアント側は以下のように。


import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class Client_UDP {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub

DatagramSocket client = new DatagramSocket();

String sendStr = "Hello! I'm Client";
byte[] sendBuf;
sendBuf = sendStr.getBytes();
InetAddress addr;
addr= InetAddress.getLocalHost();

int port = 5000;
DatagramPacket sendPacket = new DatagramPacket(sendBuf, sendBuf.length,
addr, port);
System.out.println("クライアント起動");
client.send(sendPacket);
byte[] recvBuf = new byte[100];
DatagramPacket recvPacket = new DatagramPacket(recvBuf, recvBuf.length);
client.receive(recvPacket);
String recvStr = new String(recvPacket.getData(), 0,
recvPacket.getLength());
System.out.println("サーバからの返信:" + recvStr);
client.close();
}

}

今回はほとんど説明してなくて、でも、基本原理がわかると思いますので、ちなみに、UDPのサンプルを実行させる場合には、注意してほしいところがありまして、サーバ側は閉じらないと、ネット上に、全メンバーにbroadcastするので、無限増大する可能性がありますので、気をつけてください。