Java/Network Protocol/DatagramSocket
Содержание
- 1 Datagram Sender
- 2 DatagramSocket receives DatagramPacket
- 3 DatagramSocket sends out DatagramPacket
- 4 Joining a Multicast Group
- 5 Read and write with DatagramPacket
- 6 Receive DatagramPacket
- 7 Receiving a Datagram
- 8 Receiving from a Multicast Group
- 9 Send a Datagram
- 10 Send back the response in a DatagramPacket
- 11 Sending a Datagram
- 12 Sending to a Multicast Group
- 13 Use DatagramSocket to send out and receive DatagramPacket
- 14 User Datagram Protocol Programming
Datagram Sender
<source lang="java">
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; class DatagramSender {
public static void main(String args[]) throws Exception { InetAddress ia = InetAddress.getByName(args[0]); // Obtain destination port int port = Integer.parseInt(args[1]); // Create a datagram socket DatagramSocket ds = new DatagramSocket(); // Create a datagram packet byte buffer[] = args[2].getBytes(); DatagramPacket dp = new DatagramPacket(buffer, buffer.length, ia, port); ds.send(dp); }
}
</source>
DatagramSocket receives DatagramPacket
<source lang="java">
import java.net.DatagramPacket; import java.net.DatagramSocket; public class Main {
public static void main(String[] args) throws Exception { DatagramSocket ds = new DatagramSocket(3000); byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, 1024); ds.receive(dp); String strRecv = new String(dp.getData(), 0, dp.getLength()) + " from " + dp.getAddress().getHostAddress() + ":" + dp.getPort(); System.out.println(strRecv); ds.close(); }
}
</source>
DatagramSocket sends out DatagramPacket
<source lang="java">
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class Main {
public static void main(String[] args) throws Exception { DatagramSocket ds = new DatagramSocket(); String str = "hello world"; InetAddress ia = InetAddress.getByName("127.0.0.1"); DatagramPacket dp = new DatagramPacket(str.getBytes(), str.length(), ia, 3000); ds.send(dp); ds.close(); }
}
</source>
Joining a Multicast Group
<source lang="java">
import java.net.InetAddress; import java.net.MulticastSocket; public class Main {
public static void main(String[] argv) throws Exception { String groupName = "groupName"; int port = 1024; MulticastSocket msocket = new MulticastSocket(port); InetAddress group = InetAddress.getByName(groupName); msocket.joinGroup(group); }
}
</source>
Read and write with DatagramPacket
<source lang="java">
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class Main {
public static void main(String[] args) throws Exception { byte[] ary = new byte[128]; DatagramPacket pack = new DatagramPacket(ary, 128); // read DatagramSocket sock = new DatagramSocket(1111); sock.receive(pack); String word = new String(pack.getData()); System.out.println("From: " + pack.getAddress() + " Port: " + pack.getPort()); System.out.println(word); sock.close(); // write sock = new DatagramSocket(); pack.setAddress(InetAddress.getByName(args[1])); pack.setData(args[2].getBytes()); pack.setPort(1111); sock.send(pack); sock.close(); }
}
</source>
Receive DatagramPacket
<source lang="java">
import java.net.DatagramPacket; import java.net.DatagramSocket; class Collector {
private final static int BUFSIZE = 20; public static void main(String args[]) throws Exception { int port = Integer.parseInt(args[0]); DatagramSocket ds = new DatagramSocket(port); while (true) { byte buffer[] = new byte[BUFSIZE]; DatagramPacket dp = new DatagramPacket(buffer, buffer.length); ds.receive(dp); System.out.println(new String(dp.getData())); } }
}
</source>
Receiving a Datagram
<source lang="java">
import java.net.DatagramPacket; import java.net.DatagramSocket; public class Main {
public static void main(String[] argv) throws Exception { byte[] inbuf = new byte[256]; // default size DatagramSocket socket = new DatagramSocket(); DatagramPacket packet = new DatagramPacket(inbuf, inbuf.length); socket.receive(packet); int numBytesReceived = packet.getLength(); System.out.println(numBytesReceived); }
}
</source>
Receiving from a Multicast Group
<source lang="java">
import java.net.DatagramPacket; import java.net.MulticastSocket; public class Main {
public static void main(String[] argv) throws Exception { MulticastSocket msocket = new MulticastSocket(9999); byte[] inbuf = new byte[1024]; DatagramPacket packet = new DatagramPacket(inbuf, inbuf.length); msocket.receive(packet); // Data is now in inbuf int numBytesReceived = packet.getLength(); }
}
</source>
Send a Datagram
<source lang="java">
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class Main {
public static void main(String[] argv) throws Exception { } public static void senddatagram(InetAddress target, int port, byte[] outbuf, int len) { try { DatagramPacket request = new DatagramPacket(outbuf, len, target, port); DatagramSocket socket = new DatagramSocket(); socket.send(request); } catch (SocketException e) { } catch (IOException e) { } }
}
</source>
Send back the response in a DatagramPacket
<source lang="java">
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Date; public class Main {
final private static int DAYTIME_PORT = 13; public static void main(String args[]) throws IOException { DatagramSocket socket = new DatagramSocket(DAYTIME_PORT); while (true) { byte buffer[] = new byte[256]; DatagramPacket packet = new DatagramPacket(buffer, buffer.length); socket.receive(packet); String date = new Date().toString(); buffer = date.getBytes(); // Get response address/port for client from packet InetAddress address = packet.getAddress(); int port = packet.getPort(); packet = new DatagramPacket(buffer, buffer.length, address, port); socket.send(packet); } }
}
</source>
Sending a Datagram
<source lang="java">
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class Main {
public static void main(String[] argv) throws Exception { InetAddress dst = InetAddress.getLocalHost(); int port = 8080; byte[] outbuf = new byte[1024]; int len = 1024; DatagramPacket request = new DatagramPacket(outbuf, len, dst, port); DatagramSocket socket = new DatagramSocket(); socket.send(request); }
}
</source>
Sending to a Multicast Group
<source lang="java">
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class Main {
public static void main(String[] argv) throws Exception { byte[] outbuf = new byte[1024]; int port = 1234; DatagramSocket socket = new DatagramSocket(); InetAddress groupAddr = InetAddress.getByName("8.1.2.3"); DatagramPacket packet = new DatagramPacket(outbuf, outbuf.length, groupAddr, port); socket.send(packet); }
}
</source>
Use DatagramSocket to send out and receive DatagramPacket
<source lang="java">
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class ChatClient {
public static void main(String[] args) throws Exception { DatagramSocket s = new DatagramSocket(); byte[] buf = new byte[1000]; DatagramPacket dp = new DatagramPacket(buf, buf.length); InetAddress hostAddress = InetAddress.getByName("localhost"); while (true) { BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); String outMessage = stdin.readLine(); if (outMessage.equals("bye")) break; String outString = "Client say: " + outMessage; buf = outString.getBytes(); DatagramPacket out = new DatagramPacket(buf, buf.length, hostAddress, 9999); s.send(out); s.receive(dp); String rcvd = "rcvd from " + dp.getAddress() + ", " + dp.getPort() + ": " + new String(dp.getData(), 0, dp.getLength()); System.out.println(rcvd); } }
}
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; public class ChatServer {
public static void main(String[] args) throws Exception { int PORT = 4000; byte[] buf = new byte[1000]; DatagramPacket dgp = new DatagramPacket(buf, buf.length); DatagramSocket sk; sk = new DatagramSocket(PORT); System.out.println("Server started"); while (true) { sk.receive(dgp); String rcvd = new String(dgp.getData(), 0, dgp.getLength()) + ", from address: " + dgp.getAddress() + ", port: " + dgp.getPort(); System.out.println(rcvd); BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); String outMessage = stdin.readLine(); buf = ("Server say: " + outMessage).getBytes(); DatagramPacket out = new DatagramPacket(buf, buf.length, dgp.getAddress(), dgp.getPort()); sk.send(out); } }
}
</source>
User Datagram Protocol Programming
<source lang="java">
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class Main {
final private static int DAYTIME_PORT = 13; public static void main(String args[]) throws IOException { String host = args[0]; byte message[] = new byte[256]; InetAddress address = InetAddress.getByName(host); System.out.println("Checking at: " + address); DatagramPacket packet = new DatagramPacket(message, message.length, address, DAYTIME_PORT); DatagramSocket socket = new DatagramSocket(); socket.send(packet); packet = new DatagramPacket(message, message.length); socket.receive(packet); String time = new String(packet.getData()); System.out.println(time); socket.close(); }
}
</source>