使用键盘录入的方式作为数据的发送来源,接收端则使用开启接收数据。
发送端
/*
* 要发送的数据来自于键盘录入,所以涉及到IO操作
* */
package com.test.udp;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPSenderKeyboard
{
public static void main(String[] args)throws Exception
{
//1. 先创建Socket服务
DatagramSocket socket = new DatagramSocket();
// 2. 由于要接收来自于键盘录入的数据,使用InputStream类。
//操作文本时字符流要比字节流的操作速度快,这里使用了字符流。
//为了提高读取速度,使用BufferedReader类来装饰,使用InputStreamReader作为转换流接收字节流
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
//3. 将键盘录入的数据读取出来,并封装到发送包中
String line = null;
while((line = bufr.readLine())!= null)
{
//由于键盘录入不能停止,这里要指定何时停止读取
if("886".equals(line))
break;
//否则就要将读取的内容转换为字节数组
byte[] buf = line.getBytes();
//将数据封装,InetAddress.getByName("192.168.1.255")也可以使用局域网内广播地址
DatagramPacket packet = new DatagramPacket(buf, buf.length,InetAddress.getByName("192.168.1.255"),10003);
//发送数据
socket.send(packet);
}
socket.close();
}
}
接收端
package com.test.udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPReceiverKeyboard
{
public static void main(String[] args)throws Exception
{
DatagramSocket socket = new DatagramSocket(10003);
//要让接收端不关闭,不断接收发送过来的数据,可以使用while循环方法
while(true)
{
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf,buf.length);
socket.receive(packet);
//获取发送端的IP和数据
String ip = packet.getAddress().getHostAddress();
String data = new String(packet.getData(),0, packet.getLength());
//将接收到的数据打印在控制台上
System.out.println(ip+": "+data);
}
}
}