一、单个用户的连接
1.发送端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/*
1:建立udp的socket服务
2:将要发送的数据封装成数据包
3:通过udp的socket服务,将数据包发送出
4:关闭资源
*/
public class SendDemo1 {
public static void main(String[] args) throws Exception{
// 1:建立udp的socket服务
// DatagramSocket
//DatagramSocket()
//构造数据报套接字并将其绑定到本地主机上的任何可用端口。
DatagramSocket socket = new DatagramSocket();
// 2:将要发送的数据封装成数据包 DatagramPacket
//DatagramPacket(byte[] buf, int length, InetAddress address, int port)
//构造用于发送长度的分组的数据报包 length指定主机上到指定的端口号。
byte[] bytes = "李刚来了...".getBytes();
int length = bytes.length;
InetAddress address = InetAddress.getByName("192.168.22.15");
DatagramPacket packet = new DatagramPacket(bytes, length, address, 10086);
// 3:通过udp的socket服务,将数据包发送出
//public void send(DatagramPacket p)
socket.send(packet);
// 4:关闭资源
socket.close();
}
}
2.接收端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/*
1:建立udp的socket服务.
2:通过receive方法接收数据
3:将收到的数据存储到数据包对象中
4:通过数据包对象的功能来完成对接收到数据进行解析.
5:可以对资源进行关闭
*/
public class ReceiveDemo1 {
public static void main(String[] args) throws Exception{
// 1:建立udp的socket服务
DatagramSocket socket = new DatagramSocket(10086);
// 2:通过receive方法接收数据
//public synchronized void receive(DatagramPacket p)
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
socket.receive(packet);
//4:通过数据包对象的功能来完成对接收到数据进行解析.
byte[] data = packet.getData();
int length = packet.getLength();
String info = new String(data, 0, length);
System.out.println("发送段发来一条消息:"+info);
// 5:可以对资源进行关闭
socket.close();
}
}
建立多个用户的连接
1.发送端
/*
1:建立udp的socket服务
2:将要发送的数据封装成数据包
3:通过udp的socket服务,将数据包发送出
4:关闭资源
*/
public class SendDemo1 {
public static void main(String[] args) throws Exception{
// 1:建立udp的socket服务
// DatagramSocket
//DatagramSocket()
//构造数据报套接字并将其绑定到本地主机上的任何可用端口。
DatagramSocket socket = new DatagramSocket();
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
while (true){
System.out.print("请输入要发送的内容:");
String info = sc.nextLine();
// 2:将要发送的数据封装成数据包 DatagramPacket
//DatagramPacket(byte[] buf, int length, InetAddress address, int port)
//构造用于发送长度的分组的数据报包 length指定主机上到指定的端口号。
byte[] bytes = info.getBytes();
int length = bytes.length;
InetAddress address = InetAddress.getByName("192.168.22.15");
DatagramPacket packet = new DatagramPacket(bytes, length, address, 10086);
// 3:通过udp的socket服务,将数据包发送出
//public void send(DatagramPacket p)
socket.send(packet);
if("886".equals(info)){
break;
}
}
// 4:关闭资源
socket.close();
}
}
2.接收端
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
1:建立udp的socket服务.
2:通过receive方法接收数据
3:将收到的数据存储到数据包对象中
4:通过数据包对象的功能来完成对接收到数据进行解析.
5:可以对资源进行关闭
*/
public class ReceiveDemo1 {
public static void main(String[] args) throws Exception{
// 1:建立udp的socket服务
DatagramSocket socket = new DatagramSocket(10086);
System.out.println("=================== 欢迎来到32期大群聊 =======================");
while (true){
// 2:通过receive方法接收数据
//public synchronized void receive(DatagramPacket p)
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
socket.receive(packet);
//4:通过数据包对象的功能来完成对接收到数据进行解析.
byte[] data = packet.getData();
int length = packet.getLength();
String info = new String(data, 0, length);
InetAddress address = packet.getAddress();
String hostName = address.getHostName();
BufferedWriter bw = new BufferedWriter(new FileWriter("java/src/com/shujia/day19/recode/" + hostName + ".txt",true));
if("886".equals(info)){
System.out.println("----------- 提示线 -------------");
System.out.println(hostName+" 用户已离开群聊.....");
System.out.println("----------- 提示线 -------------");
// break;
}else {
String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
System.out.println(time);
System.out.println(hostName+ ":"+info);
bw.write(time);
bw.newLine();
bw.write(info);
bw.newLine();
bw.flush();
System.out.println();
}
}
// 5:可以对资源进行关闭
// socket.close();
}
}