1. 创建一个用于发送和接收的MulticastSocket组播套接字对象
2. 创建一个指定缓冲区大小及组播地址和端口的DatagramPacket组播数据包对象
3. 使用组播套接字joinGroup(),将其加入到一个组播
4. 使用组播套接字的send()方法,将组播数据包对象放入其中,发送组播数据包.
或者
使用组播套接字的receive()方法,将组播数据包对象放入其中,接收组播数据包
5. 解码组播数据包提取信息,并依据得到的信息作出响应String s = new String(dp.getData(), 0, dp.getLength())
6. 重复过程4和5,即在while循环中实现。
7. 使用组播套接字的leaveGroup()方法,离开组播组;关闭组播套接字
接收组播数据包程序:
Java代码
public class MulticastReceived {
public static void main(String[] args) throws Exception {
InetAddress group = InetAddress.getByName("224.0.0.4")// 组播地址
int port = 4006// 端口
MulticastSocket msr = null
try {
msr = new MulticastSocket(port)// 1.创建一个用于发送和接收的MulticastSocket组播套接字对象
msr.joinGroup(group)// 3.使用组播套接字joinGroup(),将其加入到一个组播
byte[] buffer = new byte[8192]
System.out.println("接收数据包启动!(启动时间:)" + new java.util.Date() + ")")
while (true) {
DatagramPacket dp = new DatagramPacket(buffer, buffer.length)// 2.创建一个指定缓冲区大小及组播地址和端口的DatagramPacket组播数据包对象
msr.receive(dp)// 4.使用组播套接字的receive()方法,将组播数据包对象放入其中,接收组播数据包
String s = new String(dp.getData(), 0, dp.getLength())// 5.解码组播数据包提取信息,并依据得到的信息作出响应
System.out.println(s)
}
} catch (IOException e) {
e.printStackTrace()
} finally {
if (msr != null) {
try {
msr.leaveGroup(group)// 7.使用组播套接字的leaveGroup()方法,离开组播组
msr.close()// 关闭组播套接字
} catch (IOException e) {
}
}
}
}
}
发送组播数据包程序:
Java代码
public class MulticastSender {
public static void main(String[] args) throws Exception {
InetAddress group = InetAddress.getByName("224.0.0.1")// 组播地址
int port = 4000// 端口
MulticastSocket mss = null
try {
mss = new MulticastSocket(port)// 1.创建一个用于发送和接收的MulticastSocket组播套接字对象
mss.joinGroup(group)// 3.使用组播套接字joinGroup(),将其加入到一个组播
byte[] buffer = new byte[8192]
System.out.println("接收数据包启动!(启动时间:)" + new java.util.Date() + ")")
while (true) {
String message = "Hello" + new java.util.Date()
byte[] buffer2 = message.getBytes()// 2.创建一个指定缓冲区大小及组播地址和端口的DatagramPacket组播数据包对象
DatagramPacket dp = new DatagramPacket(buffer, buffer.length, group, port)
// msr.receive(dp)//接收组播数据包
mss.send(dp)// 4.使用组播套接字的send()方法,将组播数据包对象放入其中,发送组播数据包
// String s = new String(dp.getData(), 0, dp.getLength())//5.解码组播数据包提取信息,并依据得到的信息作出响应
System.out.println("发送数据包给" + group + ":" + port)
Thread.sleep(1000)
}
} catch (IOException e) {
e.printStackTrace()
} finally {
if (mss != null) {
try {
mss.leaveGroup(group)// 7.使用组播套接字的leaveGroup()方法,离开组播组
mss.close()// 关闭组播套接字
} catch (IOException e) {
}
}
}
}
}
恩 组播应该是不行 而且组播需要路由协议的支持qq用的是udp 他是利用中心服务器进行打洞后建立起的p2p的udp链接
我猜想应该是登陆的时候链接一下中心服务器 打洞成功后 以后你和好友间的聊天全是你们点对点的udp 就和服务器关系不大了
如果编聊天软件应该结合tcp和udp