不知道什么是Socket编程和UDP协议的自己去查资料。
UDP协议发送和接收数据的步骤:
发送:
创建UDP发送端的Socket对象
创建数据并把数据打包
发送数据
释放资源
接收:
创建UDP接收端的Socket对象
创建数据包用于接收数据
接收数据
解析数据包
释放资源
快速获取本机IP地址的方法:打开dos命令窗口,输入ipconfig,回车
使用多线程的目的是实现发送和接收都在一个窗口显示
//这是发送类
package UdpThreadPro;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Dictionary;
import java.util.Scanner;
public class UdpSend implements Runnable {
public void run() {
try {
//创建数据报包Socket对象,DatagramSocket这个类表示用来发送和接收数据报包的套接字
DatagramSocket ds=new DatagramSocket();
System.out.println("开始聊天吧");
while(true){
//从键盘输入
Scanner s=new Scanner(System.in);
//将键盘输入的值存入字符串a
String a=s.nextLine();
//如果键盘输入886,则退出循环,结束聊天
if(a.equals("886")){
break;
}
//将字符串转化成字节数组
byte bytes[]=a.getBytes();
//创建ip地址对象
//InetAddress类没有任何构造方法,但是调用它的getByName方法可以返回一个InetAddress类对象
InetAddress iar = InetAddress.getByName("192.168.1.128");
//创建数据报包,包含要发送的字节组数,字节数组长度,发送端的ip地址对象以及端口
DatagramPacket p=new DatagramPacket(bytes, bytes.length, iar, 2048);
//发送数据报包
ds.send(p);
//清空字节数组,防止数据重叠
bytes=null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
//这是接收类
package UdpThreadPro;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UdpReceive implements Runnable{
@Override
public void run() {
try {
//创建IP地址对象
//InetAddress类没有任何构造方法,但是调用它的getByName方法可以返回一个InetAddress类对象
InetAddress laddr = InetAddress.getByName("192.168.1.128");
//创建数据报包Socket对象,指定该Socket的接口和IP地址,这样发送端才能找到指定的接收端
DatagramSocket ds=new DatagramSocket(2048, laddr);
while(true){
//创建字符数组
byte bytes[]=new byte[1024*1024];
//创建数据报包接收数据
DatagramPacket p=new DatagramPacket(bytes, bytes.length);
//接收数据报包,包含收到的字节数组,实际长度,和发送方的 IP地址以及端口号**注意:此方法在接收到数据报包前一直阻塞
ds.receive(p);
//创建一个带长度的字节数组,p.getLength()表示接收到的数据的实际长度
byte bytes2[]=new byte[p.getLength()];
//解析数据
bytes2=p.getData();
//将字符数组转化成字符串,p.getLength()表示接收到的数据的实际长度
String b=new String(bytes2, 0,p.getLength());
//p.getAddress().getHostAddress()表示发送端的IP地址
String a=p.getAddress().getHostAddress();
//输出接收到的数据和发送端的ip地址
System.out.println("from "+a+":"+b);
//清空字节数组,防止数据重叠
bytes2=null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
//这是测试类
package UdpThreadPro;
public class Test {
public static void main(String[] args) throws InterruptedException {
//创建接收端对象
UdpReceive ur=new UdpReceive();
//创建发送端对象
UdpSend us=new UdpSend();
//创建发送和接收线程
Thread t1=new Thread(ur);
Thread t2=new Thread(us);
//启动线程
t1.start();
t2.start();
}
}