package com.example.yzb.myapplication;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class UdpUtils {
private static final int localport = 88;//自己本地的端口
private static final int targetPort = 90;//目标指定的接收端口
private static final String targetAddr = "192.168.1.201";//目标IP地址
private static final int byteSize = 1024;//byte数组大小
/**
* 使用Upd进行发送消息
* @param data 要发送的数据
*/
public static void UdpSend(byte[] data){
try {
DatagramSocket socket = new DatagramSocket(localport);//若需要制定本地端口发送数据,则在此填入端口号
DatagramPacket packet = new DatagramPacket(data,data.length, InetAddress.getByName(targetAddr),targetPort);
socket.send(packet);
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 通过Udp接收数据
* @return
*/
public static String UdpReceive(){
String receiveStr = null;
try {
DatagramSocket socket = new DatagramSocket(localport);//如果有指定的接收数据的本地端口,则填入本地端口号;没有则不用
byte[] buf = new byte[byteSize];
DatagramPacket packet = new DatagramPacket(buf,buf.length);
socket.receive(packet);
receiveStr = new String(buf,0,packet.getLength());//获取接收的数据
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return receiveStr;
}
}
★注意事项:
【1】发送:
①DatagramSocket相当于自己家里,构造时,可以填上自家的地址和门牌号。
②DatagramPacket相当于包裹,必须填上接收人(目标)的地址和门牌号。
③发送的data为byte[]类型:
比如: byte[] data = ("你好\r\n").getBytes();//注意字符串末尾要加上\r\n
④ socket.getLocalPort();//获取自己对外的端口号
socket.getLocalAddress();//获取自己对外的IP地址
【2】接收:
①若需要不断接收数据,则
while (true){
socket.receive(packet);
receiveStr = new String(buf,0,packet.getLength());//获取接收的数据
}
②packet.getPort();//获取发送方的对外端口
pacekt.getAddress();//获取发送方对外的IP地址
本文章仅用于记录自己经历和总结,若有不妥之处,请各位指正。