学习了UDP,你就可以实现局域网下的聊天功能,你可以用两台电脑试验一下,首先你可以打开你的热点,让两个电脑连接你的热点,这时的手机上就会出现两个电脑已连接,点开后,你可以发现两个电脑在你开启的局域网下的IP地址。
然后你将我下面的代码中的广播地址,改为对方的IP地址,
让他在他的电脑上改为你的IP地址,
然后你们各自运行后
开始输入的发送端口号,接受端口号
注意:比如你输入发送端口号5000,接受端口号6000,那么
他就应该输入发送端口号6000,接受端口号5000,就可实现通信了。(不仅仅只限于两台哦,多台电脑都可以)
如有不懂可以私信我,如果你们有更好的方法,可以在评论区发哦,请指教。
package wangluobiancheng;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
/*
* 聊天室功能类,类中定义了访问聊天室程序时的输出语句,以及获取输入的发送端口号,接受端口号,和实现发送功能的和接收功能的方法
*/
public class CharRoom {
public static void main(String[] args) {
System.out.println("欢迎您进入聊天室");
Scanner sc = new Scanner(System.in);
System.out.println("请输入本程序发送端端口号");
int sendPort = sc.nextInt();
System.out.println("请输入本程序接受端端口号");
int receivePort = sc.nextInt();
System.out.println("聊天系统启动");
new Thread(new SendTask(sendPort),"发送端任务").start();//创建一个启动new SendTask(sendPort)对象的线程,名字为发送端任务
new Thread(new ReceiveTask(receivePort),"接受端任务").start();//创建一个启动new ReceiveTask(receivePort)对象的线程,名字为接受端任务
}
}
/*
* 发送数据的任务类。实现发送数据的功能,该功能需要通过一个实现了Runnable接口的类来实现,
* 类中需要定义获取发送数据的端口号,并在实现run()方法中,编写显示接受到的数据的方法
*/
class SendTask implements Runnable{
private int sendPort;//发数据的端口号
// 构造方法
public SendTask(int sendPort) {
this.sendPort = sendPort;
}
public void run() {
try {
// 1.创建DatagramSocket对象
DatagramSocket ds = new DatagramSocket();
// 2.输入要发送的数据
Scanner sc = new Scanner(System.in);
while(true) {
String data = sc.nextLine();//获取键盘输入的数据
// 3.封装数据到DatagramPacket对象中
byte[] buf = data.getBytes();
// InetAddress.getByName("127.0.0.255"),127.0.0.255是广播地址,当前局域网下,都会收到。
// 创建一个要发送的数据包dp,DatagramPacket类似于集装箱,数据包包括发送的数据,数据的长度,接收端的IP地址和端口号
// sendPort是接受端的端口
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.43.196"),sendPort);
// 4.发送数据
ds.send(dp);
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
/*
* 接受数据的任务类
*/
class ReceiveTask implements Runnable{
private int receivePort;//接受数据的端口号
public ReceiveTask(int receivePort) {
this.receivePort=receivePort;
}
public void run() {
try {
// 1.DatagramSocket对象
DatagramSocket ds = new DatagramSocket(receivePort);
// 2.创建DatagramPacket对象
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
// 3.接受数据
while(true) {
ds.receive(dp);
// 4.显示接受到的数据
String str = new String(dp.getData(),0,dp.getLength());
System.out.println("收到"+dp.getAddress().getHostAddress()+"--发送的数据--"+str);
}
}catch(Exception e) {
e.printStackTrace();
}
}
}