Java网络编程---UDP

UDP简述

UDP是一种无连接传输协议(网络中传输的数据格式在网络编程中就被称作协议)。该协议称为用户数据报协议。

UDP特点

1.无连接。只要知道对端的IP和端口号就可以直接进行传输而不需要建立连接(例如生活中的发短信,只管发,不在意对方是否能收到)
2.不可靠。没有确认机制,没有重传机制。(例如打微信电话时候网络不稳定或是信号不好,听不清楚对方说什么,这就是因为丢失数据包导致的)
3.速度快。UDP是IOS模型传输层其中之一,除此之外还有TCP,TCP控制相对来说比较复杂,其中使用到的机制包括三次握手、流量控制、滑动窗口、序列号、确认号等,链路比较多。而UDP是无连接的,链路的开销比较小所以速度快

代码实现

客户端

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) {
        Scanner sca = new Scanner(System.in);
        try {
            //创建发送端套接字
            DatagramSocket socket = new DatagramSocket();
            //指定ip
            InetAddress ip = InetAddress.getByName("localhost");
            //指定一个端口
            int port = 9999;
            //创建一个容器
            byte data[];
            while(true){
                System.out.println("你发送的东西");
                String str = sca.next();
                //把数据放进容器
                data = str.getBytes();
                //打包数据
                DatagramPacket packet = new DatagramPacket(data, data.length,ip,port);
                //发送数据报包
                socket.send(packet);
                if (str.equals("exit")){
                    break;
                }
            }
            //释放资源
            socket.close();
        } catch (SocketException | UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

服务器

import java.io.IOException;
import java.net.*;

public class Server{
    public static void main(String[] args) {
        try {
            //创建套接字并将其绑定到本地主机上的指定端口。
            DatagramSocket socket = new DatagramSocket(9999);
            //创建接受数据的容器
            byte []data = new byte[1024];
            //创建一个接受数据的数据包
            DatagramPacket datagramPacket = new DatagramPacket(data, data.length);
            while(true){
                //开始接收数据
                socket.receive(datagramPacket);
                //解析数据
                String str = new String(datagramPacket.getData(),0, datagramPacket.getLength());
                //接收到的数据
                System.out.println(datagramPacket.getAddress()+"发送的消息:"+str);
                if (str.equals("exit")){
                    break;
                }
            }
            socket.close();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

PS:先启动服务器再启动客户端

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值