一、单个用户的连接
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();}
}