首页 > 其他分享 >Udp

Udp

时间:2024-07-07 10:57:17浏览次数:5  
标签:DatagramSocket Udp DatagramPacket socket packet new String

Udp协议

1.客户端(与服务器不需建立连接)

//1.建立socket
DatagramSocket datagramSocket = new DatagramSocket();
//2.建立一个包
String msg = "你好!";
InetAddress localhost = InetAddress.getByName("127.0.0.1");
int post = 9000;
//数据,数据起始,数据长度,数据发送地址
DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,localhost,post);
//3.发送包
datagramSocket.send(packet);
//4.关闭流
datagramSocket.close();

2.服务端(等待接受客户数据)

//1.创建一个端口
DatagramSocket datagramSocket = new DatagramSocket(9000);
//2.接受数据包
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);

datagramSocket.receive(packet);

System.out.println(packet.getAddress().getHostAddress());
System.out.println(new String(packet.getData(),0,packet.getLength()));
//3.关闭资源
datagramSocket.close();

3.Udp聊天

//Sender
DatagramSocket socket = new DatagramSocket(9999);

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

while (true){
    String data = reader.readLine();
    byte[] bytes = data.getBytes();
    DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length,new InetSocketAddress("localhost",9000));

    socket.send(packet);
    if(data.equals("Bye")){
        break;
    }
}
socket.close();
//Receiver
DatagramSocket socket = new DatagramSocket(9000);

while (true){
    byte[] container = new byte[1024];
    DatagramPacket packet = new DatagramPacket(container, 0,container.length);
    socket.receive(packet);

    String receiveData = new String(packet.getData(),0, packet.getLength());

    System.out.println(receiveData);

    if (receiveData.equals("Bye")){
        break;
    }
}

4.Udp多线程在线聊天

//发送
public class TalkSender implements Runnable{
    DatagramSocket socket;
    BufferedReader reader;

    private int fromPort;
    private int toPort;
    private String toIP;

    public TalkSender(int fromPort, int toPort, String toIP) throws SocketException {
        this.fromPort = fromPort;
        this.toPort = toPort;
        this.toIP = toIP;

        socket = new DatagramSocket(fromPort);
        reader = new BufferedReader(new InputStreamReader(System.in));
    }

    @Override
    public void run() {
        try {
            while (true){
                String data = reader.readLine();
                byte[] bytes = data.getBytes();
                DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length,new InetSocketAddress(toIP,toPort));

                socket.send(packet);
                if(data.equals("Bye")){
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            socket.close();
        }
    }
}
//接收
public class TalkReceive implements Runnable{
    DatagramSocket socket;

    private int port;

    public TalkReceive(int port) throws SocketException {
        this.port = port;
        socket = new DatagramSocket(port);
    }

    @Override
    public void run() {
        while (true){
            try {
                byte[] container = new byte[1024];
                DatagramPacket packet = new DatagramPacket(container, 0,container.length);
                socket.receive(packet);

                String receiveData = new String(packet.getData(),0, packet.getLength());

                System.out.println(receiveData);

                if (receiveData.equals("Bye")){
                    break;
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        socket.close();
    }
}
//学生
public class Student {
    public static void main(String[] args) throws SocketException {
        new Thread(new TalkSender(9000,9999, "localhost")).start();
        new Thread(new TalkReceive(8000)).start();
    }
}
//老师
public class Teacher {
    public static void main(String[] args) throws SocketException {
        new Thread(new TalkSender(9900,8000,"localhost")).start();
        new Thread(new TalkReceive(9999)).start();
    }
}

URL(统一资源定位符:定位资源的)

DNS 域名解析 www.baidu.com ==>xxx.x.x.x
$$
协议://IP地址:端口号/项目名/资源
$$
下载网络资源

//下载网易云音乐
//1.下载地址对象
URL url = new URL("\n" +
        "https://m801.music.126.net/20240626104551/9e6149f5e794ca208ff3364e74f57c51/jdyyaac/obj/w5rDlsOJwrLDjj7CmsOj/20289466004/7191/9c89/dca3/a0d98a2848ee5258b94cbc01a6f889c8.m4a");

//2.连接资源的http
 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
 
 //3.copy资源
InputStream is = urlConnection.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream("music.m4a");

byte[] buffer = new byte[1024];
int len;
while ((len=is.read(buffer)) != -1){
    fileOutputStream.write(buffer,0,len);
}
//4.关闭连接
is.close();
fileOutputStream.close();
urlConnection.disconnect();

标签:DatagramSocket,Udp,DatagramPacket,socket,packet,new,String
From: https://www.cnblogs.com/JasHu/p/18287260

相关文章

  • UDP套接字基础总结
    最近和同学做一个有趣的实验,大致场景是:将摄像头连接到树莓派上,在树莓派上编写代码来捕获摄像头传回的数据。在这个场景中,树莓派是服务器端,摄像头是客户端,传递数据采用的协议是UDP。实验过程中发现自己对UDP套接字的使用有些不熟练,于是做一个总结。编程语言采用C,参考资料为《TCP/I......
  • 【面试题】网络UDP协议(第五篇)
    1.UDP如何实现可靠?UDP协议是面向无连接的、不可靠的传输层协议,可以通过在应用层添加一些机制来实现UDP的可靠传输。序列号和确认应答机制:为每个发送的数据包分配一个唯一的序列号,并且要求接收方发送确认应答来确认已经收到数据包。重传机制:在数据发出后,如果超过某个时间没......
  • TCP与UDP_三次握手_四次挥手
    TCPvsUDPTCP数据具体可以通过CiscoPacketTracer工具查看:UDP数据三次握手、四次挥手为什么是3/4次?这牵扯到单工、双工通信的问题TCP建立连接:表白TCP释放连接:分手TCP—建立连接—三次握手解释:首先,启动服务器,让服务器进入监听状态(监听客户端的连接请......
  • TCP与UDP详解:层次、区别及应用场景
    TCP和UDP的层次及区别详解所属层次TCP(TransmissionControlProtocol,传输控制协议)和UDP(UserDatagramProtocol,用户数据报协议)都属于OSI模型中的传输层(第四层)。在传输层,协议的主要作用是为端到端的通信提供逻辑通信,并确保数据在网络上传输的可靠性和顺序。TCP和UDP的区别......
  • JAVAEE值之网络原理(1)_用户数据报协议(UDP)、概念、特点、结构、代码实例
    前言 在前两节中我们介绍了UDP数据报套接字编程,但是并没有对UDP进行详细介绍,本节中我们将会详细介绍传输层中的UDP协议。一、什么是UDP? UDP工作在传输层,用于程序之间传输数据的。数据一般包含:文件类型,视频类型,jpg图片等。1.1基本概念: UDP的全称:用户数据报协议(U......
  • 13. UDP协议与RTP协议
    UDP协议UDP协议比较简单:UDP的长度是固定的,用总长度-UDP长度就是数据长度。UDP是不保证他的有序性和可靠性的。对于音频和视频是这样是比较好的,因为这段丢了,我们可以从下一段在开始解码。RTPRTP协议概述RTP(Real-timeTransportProtocol)是用于Internet上针对多媒体......
  • UDP双向通信
    UDP的双向通信双向交替通信(AlternatingBidirectionalCommunication):在这种方式下,通过约定一方作为发送方,一方作为接收方,双方交替发送和接收数据。例如,一方发送数据报给另一方,然后等待对方的回应,对方接收数据报后进行处理,然后发送回应给发送方,交替进行下去。UDP客户端-服务器通......
  • 【QT5】<总览五> QT多线程、TCP/UDP
    文章目录前言一、QThread多线程二、QT中的TCP编程1.TCP简介2.服务端程序编写3.客户端程序编写4.服务端与客户端测试三、QT中的UDP编程1.UDP简介2.UDP单播与广播程序前言承接【QT5】<总览四>QT常见绘图、图表及动画。若存在版权问题,请联系作者删除!一、QThre......
  • UDP报文结构
    学习一个协议,首先就是去理解它的报文结构。UDP数据报可以分为报头与载荷两个部分。报头占八个字节,分别是源端口号,目的端口号,udp报文长度,UDP校验和,每个部分占两个字节。载荷是完整的应用层的数据报。报头和载荷可以认为是“拼接“在一起。UDP报文长度:是一个两个字节的16位的......
  • JAVAEE之网络编程(1)_套接字、UDP数据报套接字编程及从代码实例
    前言什么是网络编程呢? 网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。当然,即便是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程一、网路编程中的基本概念1.1发送端和接收端发送端:数据的发送方进程,称为发送端。发......