目前网络访问分为单播、广播和组播,以下将介绍其Java实现。
单播服务端
public class SingleServer extends Thread{
public void run(){
try {
int port = 30000;
byte[] buffer = new byte[1024];
DatagramSocket server = new DatagramSocket(port);
DatagramPacket recivePacket = new DatagramPacket(buffer,buffer.length);
while(true){
server.receive(recivePacket);
String str = new String(buffer,0,recivePacket.getLength());
System.out.println("SingleServer接收到的:"+str);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
单播客户端
public class SingleClient extends Thread{
public void run(){
try{
String str = "要发送的数据";
int port = 30000;
DatagramSocket client = new DatagramSocket();
SocketAddress address = new InetSocketAddress(InetAddress.getLocalHost(),port);
DatagramPacket sendPacket = new DatagramPacket(str.getBytes(),str.getBytes().length,address);
client.send(sendPacket);
client.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
广播服务端,和单播的服务端一样。
public class BroadcastServer extends Thread{
public void run(){
try {
int port = 30000;
byte[] buffer = new byte[1024];
DatagramSocket server = new DatagramSocket(port);
DatagramPacket recivePacket = new DatagramPacket(buffer,buffer.length);
while(true){
server.receive(recivePacket);
String str = new String(buffer,0,recivePacket.getLength());
System.out.println("BroadcastServer接收到的:"+str);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
广播客户端,和单播的客户端的区别是,发送的host地址为“255.255.255.255”广播地址。
public class BroadcastClient extends Thread{
public void run(){
try{
String str = "要发送的数据";
String host = "255.255.255.255";
int port = 30000;
DatagramSocket client = new DatagramSocket();
SocketAddress address = new InetSocketAddress(InetAddress.getByName(host),port);
DatagramPacket sendPacket = new DatagramPacket(str.getBytes(),str.getBytes().length,address);
client.send(sendPacket);
client.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
组播的服务端,预先定义一个组播地址,然后加入到组中。组播地址必须和客户端一样,才能够接收到客户端发送的信息。
public class MulticastServer extends Thread{
public void run(){
try {
byte[] buffer = new byte[1024];
int port = 30000;
InetAddress address = InetAddress.getByName("230.0.0.1");
DatagramPacket recivePacket = new DatagramPacket(buffer,buffer.length);
MulticastSocket server = new MulticastSocket(port);
server.joinGroup(address);//需要join到组播地址,否则收不到组播信息
while(true){
server.receive(recivePacket);
String str = new String(buffer,0,recivePacket.getLength());
System.out.println("MulticastServer接收到的:"+str);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
组播客户端,组播地址和服务端一样
public class MulticastClient extends Thread{
public void run(){
try{
String str = "要发送的数据";
int port = 30000;
InetAddress address = InetAddress.getByName("230.0.0.1");
MulticastSocket client = new MulticastSocket();
client.joinGroup(address);
DatagramPacket sendPacket = new DatagramPacket(str.getBytes(),str.getBytes().length,address,port);
client.send(sendPacket);
client.close();
}catch(Exception e){
e.printStackTrace();
}
}
}