Java--网络编程--UDP与URL

Java–网络编程–UDP与URL

初识UDP

package com.zy.net;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 *description: java--网络编程--UDP发送端
 * 不需要连接服务端
 *@program: 基础语法
 *@author: zy
 *@create: 2023-03-08 20:45
 */
public class StudyUdpClient {

    public static void main(String[] args) {
        try {
            initUdpClient();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @Description UDP发送消息
     * @author zy
     * []
     * void
     * @date 2023-3-8 20:56
     */
    public static void initUdpClient() throws Exception {
        // 1.建立一个socket
        DatagramSocket datagramSocket = new DatagramSocket();
        // 2.发送地址
        InetAddress IP = InetAddress.getByName("localhost");
        int port = 9090;
        // 3.建个包
        String msg = "你好啊,服务器!";
        DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,IP,port);
        // 4.发送包
        datagramSocket.send(packet);
        // 5.关闭资源:先开后关
        datagramSocket.close();
    }
}

package com.zy.net;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 *description: Java--网络编程--UDP接收端
 *@program: 基础语法
 *@author: zy
 *@create: 2023-03-08 20:55
 */
public class StudyUdpServer {

    public static void main(String[] args) {
        try {
            initUdpServer();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @Description UDP接收消息
     * @author zy
     * []
     * void
     * @date 2023-3-8 20:56
     */
    public static void initUdpServer() throws Exception{
        // 开放端口
        DatagramSocket socket = new DatagramSocket(9090);
        // 接收数据包
        byte[] buffer = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
        // 阻塞式接收
        socket.receive(packet);
        // 输出消息
        System.out.println(packet.getAddress().getHostAddress());
        System.out.println(new String(packet.getData(), 0, packet.getLength()));
        // 关闭资源
        socket.close();
    }
}

UDP循环发送消息

package com.zy.net;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

/**
 *description: Java--网络编程--UDP发送方
 *@program: 基础语法
 *@author: zy
 *@create: 2023-03-08 21:10
 */
public class StudyUdpSender {

    public static void main(String[] args) {
        try {
            initUdpSend();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * @Description 循环发送消息
     * @author zy
     * []
     * void
     * @date 2023-3-8 21:13
     */
    public static void initUdpSend() throws Exception{

        DatagramSocket socket = new DatagramSocket(8888);

        // 准备数据:控制台输入接收
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        while(true){
            String data = reader.readLine();
            byte[] datas = data.getBytes();

            DatagramPacket packet = new DatagramPacket(datas,0,datas.length,
                    new InetSocketAddress("localhost",6666));

            socket.send(packet);

            if("bye".equals(data)){
                break;
            }
        }

        // 关闭资源:先开后关
        reader.close();
        socket.close();
    }
}

package com.zy.net;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 *description: Java--网络编程--UDP接收方
 *@program: 基础语法
 *@author: zy
 *@create: 2023-03-08 21:11
 */
public class StudyUdpReceiver {

    public static void main(String[] args) {
        try {
            initUdpReceive();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @Description 循环接收消息
     * @author zy
     * []
     * void
     * @date 2023-3-8 21:13
     */
    public static void initUdpReceive() throws Exception{
        DatagramSocket socket = new DatagramSocket(6666);

        while (true){
            // 准备接收
            byte[] container = new byte[1024];
            DatagramPacket packet = new DatagramPacket(container,0,container.length);
            // 阻塞式接收
            socket.receive(packet);
            // 输出消息
            byte[] data = packet.getData();
            String receiveData = new String(data, 0, packet.getLength());
            System.out.println(receiveData);
            // 断开连接
            if("bye".equals(receiveData)){
                break;
            }
        }

        socket.close();
    }
}

UDP多线程实现实时聊天

package com.zy.net.chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

/**
 *description: Java--网络编程--聊天发送方
 *@program: 基础语法
 *@author: zy
 *@create: 2023-03-08 22:03
 */
public class StudyUdpChatSender implements Runnable {

    private DatagramSocket socket = null;
    private BufferedReader reader = null;
    private int fromPort;
    private String toIp;
    private int toPort;

    public StudyUdpChatSender(int fromPort, String toIp, int toPort) {
        this.fromPort = fromPort;
        this.toIp = toIp;
        this.toPort = toPort;

        try {
            // 准备数据:控制台输入接收
            this.socket = new DatagramSocket(this.fromPort);
            this.reader = new BufferedReader(new InputStreamReader(System.in));
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    /**
     * @Description 聊天发送
     * @author zy
     * []
     * void
     * @date 2023-3-8 22:05
     */
    public void initUdpChatSend() throws Exception{

        while(true){
            String data = reader.readLine();
            byte[] datas = data.getBytes();

            DatagramPacket packet = new DatagramPacket(datas,0,datas.length,
                    new InetSocketAddress(toIp,toPort));

            socket.send(packet);

            if("bye".equals(data)){
                break;
            }
        }

        // 关闭资源:先开后关
        reader.close();
        socket.close();
    }

    @Override
    public void run() {
        try {
            initUdpChatSend();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

package com.zy.net.chat;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 *description: Java--网络编程--聊天接收方
 *@program: 基础语法
 *@author: zy
 *@create: 2023-03-08 22:04
 */
public class StudyUdpChatReceiver implements Runnable {

    private DatagramSocket socket = null;
    private String msgFrom;
    private int port;

    public StudyUdpChatReceiver(String msgFrom, int port) {
        this.msgFrom = msgFrom;
        this.port = port;

        try {
            this.socket = new DatagramSocket(this.port);
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    /**
     * @Description 聊天接收
     * @author zy
     * []
     * void
     * @date 2023-3-8 22:05
     */
    public void initUdpChatReceive() throws Exception{


        while (true){
            // 准备接收
            byte[] container = new byte[1024];
            DatagramPacket packet = new DatagramPacket(container,0,container.length);
            // 阻塞式接收
            socket.receive(packet);
            // 输出消息
            byte[] data = packet.getData();
            String receiveData = new String(data, 0, packet.getLength());
            System.out.println(msgFrom+":"+receiveData);
            // 断开连接
            if("bye".equals(receiveData)){
                break;
            }
        }

        socket.close();
    }

    @Override
    public void run() {
        try {
            initUdpChatReceive();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

package com.zy.net.chat;

/**
 *description: 学生端
 *@program: 基础语法
 *@author: zy
 *@create: 2023-03-08 22:32
 */
public class StudentChat {

    public static void main(String[] args) {
        // 学生发与收
        new Thread(new StudyUdpChatSender(7777,"127.0.0.1",9999)).start();
        new Thread(new StudyUdpChatReceiver("老师",8888)).start();
    }
}

package com.zy.net.chat;

/**
 *description: 老师端
 *@program: 基础语法
 *@author: zy
 *@create: 2023-03-08 22:32
 */
public class TeacherChat {

    public static void main(String[] args) {
        // 老师发与收
        new Thread(new StudyUdpChatSender(5555,"127.0.0.1",8888)).start();
        new Thread(new StudyUdpChatReceiver("学生",9999)).start();
    }
}

URL

package com.zy.net;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 *description: Java--网络编程--URL
 *@program: 基础语法
 *@author: zy
 *@create: 2023-03-08 22:56
 */
public class StudyUrl {

    /*
    统一资源定位符:定位资源的,定位互联网上的某一个资源;
    组成:协议://IP地址:端口号/项目名/资源
     */

    public static void studyUrl() throws Exception {
        URL url = new URL("http://localhost:8099/helloworld/index.jsp?username=zs&password=123456");
        // 协议名:http
        System.out.println(url.getProtocol());
        // 主机ip:localhost
        System.out.println(url.getHost());
        // 端口:8080
        System.out.println(url.getPort());
        // 文件地址:/helloworld/index.jsp
        System.out.println(url.getPath());
        // 文件全路径:/helloworld/index.jsp?username=zs&password=123456
        System.out.println(url.getFile());
        // 参数:username=zs&password=123456
        System.out.println(url.getQuery());
    }
    
    /**
     * @Description URL下载文件
     * @author zy
     * []
     * void
     * @date 2023-3-8 23:14
     */
    public static void urlDownloadFile() throws Exception{
        // 1.下载地址
        URL url = new URL("https://m701.music.126.net/20230308235355/d89bf9dcb214a77e74825894fb32116f/jdyyaac/obj/w5rDlsOJwrLDjj7CmsOj/23275434670/be18/af26/9247/263b2c3627e2aaa814bc2e086ff7d59e.m4a");
        // 2.连接地址
        HttpURLConnection httpUrl = (HttpURLConnection) url.openConnection();
        // 3.下载文件
        InputStream is = httpUrl.getInputStream();
        byte[] buffer = new byte[1024];
        int len;
        FileOutputStream fos = new FileOutputStream(new File("JavaProjectDemo/statics/netfile/后来的我们【五月天】.mp3"));
        while ((len = is.read(buffer)) != -1){
            // 写出数据
            fos.write(buffer,0,len);
        }
        System.out.println("下载完毕!");
        // 4.关闭资源:先开后关
        fos.close();
        is.close();
        httpUrl.disconnect();
    }

    public static void main(String[] args) {
        try {
            // 初识URL
            studyUrl();
            // URL下载文件
            urlDownloadFile();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值