前言:天呐!这两天上班就像走钢丝啊,老大家里出事请假一周,手机关机,底层无人照看,机器又忙着定标,技术盲老板事事问我这个底层小白。做人好难呐。。。还是祝愿老大家里没有大碍吧,也保佑自己明天能安然度过。。保佑保佑。
原文出处:http://blog.csdn.net/u014158743/article/details/52928781
udp协议实现数据的基本发送与接收
UdpReceive
/**
* 使用 udp协议实现数据的接收
* 1:创建Socket端点,实现数据的接收,同时要监听端口
* 2:创建用来接收数据的数据报包
* 3:使用 Socket的接收功能接收数据
* @throws IOException
*/
public static void main(String[] args) throws IOException {
System.out.println("接收方启动.....");
//1:创建Socket端点,实现数据的接收
DatagramSocket socket = new DatagramSocket(22222);
//2:创建了一个空的数据报包用来接收数据
byte[] arr = new byte[1024];
DatagramPacket packet = new DatagramPacket(arr, arr.length);
//3:使用 Socket的接收功能接收数据
//接收数据就是从网络读取数据
socket.receive(packet);
//解析接收的数据
//解析数据
byte[] data = packet.getData();//得到接收的数据
String shuju = new String(data,0,packet.getLength());
//得到发送方的ip地址
InetAddress address = packet.getAddress();
String ip = address.getHostAddress();
//得到发送方发送数据使用的端口
int port = packet.getPort();
System.out.println(ip+":"+port+":"+shuju);
socket.close();
}
UdpSend
/**
* 使用udp协议实现数据的发送
* 1:创建 Socket端点,实现数据的发送
* 2:明确要发送的数据
* 3:把要发送的数据打成数据报包
* 4:使用 Socket的发送功能发送数据
* @throws IOException
*/
public static void main(String[] args) throws IOException {
System.out.println("发送方启动.....");
//1:创建 Socket端点,实现数据的发送
DatagramSocket socket = new DatagramSocket();//明确了协议
//2:明确要发送的数据
String ss ="明天放假";
byte[] data = ss.getBytes();
//3:把要发送的数据打成数据报包
//数据报包指明了发送的数据,接收数据的主机的Ip地址对象,接收数据的主机使用哪个端口接收
DatagramPacket dp = new DatagramPacket(data,data.length, InetAddress.getByName("192.168.1.212"), 22222);
//4:使用 Socket的发送功能发送数据
//发送数据就是向网络输出数据,所以内部使用了输出流
socket.send(dp);
socket.close();
}
使用udp实现一直发送数据与接收数据
UdpSend
/**
* 使用udp实现发送方可以一直发送
* 1:创建 Socket端点
* 2:循环读取键盘输入的数据,把每次读取的数据发出去
* 3:关闭 Socket
* @throws IOException
*/
public static void main(String[] args) throws IOException {
System.out.println("方式方启动.....");
DatagramSocket s = new DatagramSocket();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line = br.readLine())!=null)
{
if("over".equals(line))
break;
byte[] arr = line.getBytes();
DatagramPacket packet = new DatagramPacket(arr, arr.length, InetAddress.getByName("192.168.1.212"),33333);
s.send(packet);
}
br.close();
s.close();
}
UdpReceive
/**
* 使用udp实现接收方可以一直接收
* @throws IOException
*/
public static void main(String[] args) throws IOException {
System.out.println("接收方启动....");
DatagramSocket s = new DatagramSocket(33333);
while(true)
{
byte[] arr = new byte[1024];
DatagramPacket packet = new DatagramPacket(arr, arr.length);
s.receive(packet);
String data = new String(packet.getData(),0,packet.getLength());
String ip = packet.getAddress().getHostAddress();
System.out.println(ip+":"+data);
}
//s.close();
}
使用udp实现一个聊天程序
发送的同时可以接收 创建一个线程负责发送数据 创建一个线程负责接收数据
public class UdpChat {
public static void main(String[] args) throws SocketException {
DatagramSocket sendSocket = new DatagramSocket();
DatagramSocket receiveSocket = new DatagramSocket(44444);
new Thread(new Send(sendSocket)).start();
new Thread(new Receive(receiveSocket)).start();
}
}
// 定义发送线程的任务
class Send implements Runnable {
private DatagramSocket socket;
public Send(DatagramSocket socket) {
this.socket = socket;
}
@Override
public void run() {
// 任务是可以一直发送数据
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
try {
while ((line = br.readLine()) != null) {
byte[] data = line.getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length,
InetAddress.getByName("192.168.1.212"), 44444);
socket.send(packet);
if ("baibai".equals(line)) {
break;
}
}
br.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 定义接收线程的任务
class Receive implements Runnable {
private DatagramSocket socket;
public Receive(DatagramSocket socket) {
this.socket = socket;
}
@Override
public void run() {
// 可以一直接收数据的任务
try {
while(true)
{
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
socket.receive(packet);
String shuju = new String(packet.getData(),0,packet.getLength());
String ip = packet.getAddress().getHostAddress();
if("baibai".equals(shuju))
{
System.out.println(ip+"离开了聊天室");
}
System.out.println(ip+":"+shuju);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
晚安,祝工作顺利。