概念
udp和tcp是两种常见的网络传输协议,udp的特点是速度快,但是稳定性差,可能会丢失数据。tcp的数据是稳定性高但是速度相对较慢。
udp协议传输数据实例
创建发送端
package com.test.udpTest;
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 UdpSend {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//发送端
try {
//1.创建一个socket(码头)
DatagramSocket datagramSocket=new DatagramSocket();
//2.创建packet (集装箱)
byte[] data="你好,通信技术".getBytes();
int length=data.length;
InetAddress ip=InetAddress.getByName("192.168.8.4");
int port=8888; // 0-1023端口号一般是常用的知名的程序的端口号 65535以内
//DatagramPacket(byte[] buf, int length, InetAddress address, int port)
DatagramPacket datagramPacket=new DatagramPacket(data, length, ip, port);
//3.发送
datagramSocket.send(datagramPacket);
//4.关闭码头
datagramSocket.close();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
创建接收端
package com.test.udpTest;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UdpReceive {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.创建码头 接收端的码头需要添加端口号,发送端端口号要跟接收端的端口号一致
try {
DatagramSocket datagramSocket=new DatagramSocket(8888);
//2.创建packet 用来接收传递过来的数据
byte[] data=new byte[1024];
int length=data.length;
DatagramPacket datagramPacket=new DatagramPacket(data, length);
//3.接收数据
datagramSocket.receive(datagramPacket);
String ip=datagramPacket.getAddress().getHostAddress();
String msg=new String(data);
System.out.println("接收到来自"+ip+"的信息:"+msg);
//4.关闭码头
datagramSocket.close();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
先运行接收端,在运行发送端,结果如图所示,接收端成功接收到了数据。