基于UDP协议的基本传输

基于UDP协议的通信是不安全的因为输出的包没有标记,接收方无法判别文件是否丢失

UDP协议两个最重要的关键字为:

datagramsocketdatagrampacket

datagrampacket是用来打包数据的,将接收方的IP地址和接口都写进包内

datagramsocket只负责寄出这个包裹,它自己会传输到指定端口

接收方可通过传送过来的包裹获取其中的socketAddress

并通过这个地址信息返回信息给寄出方

代码示例:

* 客户端
 * @author 金前旺
 *
 */
public class Datagramclient {
public static void main(String[] args) {
InetAddress ia = null;
DatagramPacket packet = null;
DatagramSocket socket = null;

DatagramPacket dp = null;

String str  ="姓名:金前旺   密码:123";
byte[] b =  str.getBytes();

try {
//通过InetAddress.getByName()可以获取输入括号内地址的ip参数
ia = InetAddress.getByName("localhost");
//将数据打包,参数:数组,数组长度,对方IP,端口
packet = new DatagramPacket(b, b.length, ia, 5000);
//通过new DatagramSocket()可以获取寄出邮件的对象
socket = new DatagramSocket();

//将邮件寄出
socket.send(packet);

//然后接受对方返回的信息
byte[] by = new byte[1024];
//准备一个接受的数组,并将其打包成DatagramPacket对象
dp = new DatagramPacket(by, by.length);
//然后调用socket接受邮包
socket.receive(dp);
//然后拆包
String st = new String(dp.getData(), 0, dp.getData().length);
System.out.println("主机说"+st);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
socket.close();

}

* 主机端
 * @author 金前旺
 *
 */
public class DatagramServer {
public static void main(String[] args) {
DatagramSocket socket = null;

//首先准备一个数组
byte[] b = new byte[1024];
//将数组打包
DatagramPacket packet = new DatagramPacket(b, b.length);
//然后获取DatagramSocket对象,用来发出和接受邮包
try {
socket = new DatagramSocket(5000);
//然后接受寄来的邮包
socket.receive(packet);
//拆包
String str = new String(packet.getData(), 0, packet.getData().length);
System.out.println("客户说:"+str);

//然后给个回复
String s= "验证无误,允许登陆!";
byte[] by = s.getBytes();
//获得对方的IP地址和接口信息
SocketAddress sa = packet.getSocketAddress();
//有了IP和接口地址我们就可以寄出邮包了
DatagramPacket dp = new DatagramPacket(by, by.length, sa);
//然后通过socket将这个邮包寄出去
socket.send(dp);

} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if (socket!=null) {
socket.close();
}

扫描二维码关注公众号,回复: 1151616 查看本文章


猜你喜欢

转载自blog.csdn.net/jinqianwang/article/details/80316310