网络编程常用方法

这篇具有很好参考价值的文章主要介绍了网络编程常用方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Further Reading :网络编程 专题文章来源地址https://www.toymoban.com/news/detail-666304.html

package com.zhangziwa.practisesvr.utils.http;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.net.*;
import java.util.Arrays;

@Slf4j
public class UriUtils {

    /**
     * 判断给定的URL字符串是否符合特定要求:
     * - URL非空且格式正确
     * - 协议必须是HTTP或HTTPS
     * - 不允许环回地址(例如:127.0.0.1 或 ::1)
     *
     * @param urlStr 待校验的URL字符串
     * @return 如果URL满足上述条件,返回true;否则返回false
     * @throws IllegalArgumentException 当URL格式错误或主机未知时抛出异常
     */
    public boolean checkUrl(String urlStr) {
        if (StringUtils.isBlank(urlStr)) {
            return false;
        }

        URL url;
        try {
            url = new URL(urlStr);
        } catch (MalformedURLException e) {
            throw new IllegalArgumentException("Invalid URL format: " + urlStr, e);
        }

        // 限制协议
        String protocol = url.getProtocol().toLowerCase();
        if (!Arrays.asList("http", "https").contains(protocol)) {
            return false;
        }

        try {
            InetAddress inetAddress = InetAddress.getByName(url.getHost());
            // 限制环回地址
            if (inetAddress.isLoopbackAddress()) {
                return false;
            }
        } catch (UnknownHostException e) {
            throw new IllegalArgumentException("Unknown host: " + url.getHost(), e);
        }

        return true;
    }

    /**
     * 从给定的URL字符串中提取主机名。
     * 如果URL格式不正确,将返回一个空字符串(在优化前)或 null(在优化后建议版本),
     * 并记录相应的错误信息。
     * <p>
     * http://www.example.com:80/path/to/resource?query=param 返回 "www.example.com"
     *
     * @param urlStr 待解析的URL字符串
     * @return URL中的主机名部分,如果无法获取,则返回空字符串或null
     */
    public String getHost(String urlStr) {
        try {
            URI uri = new URI(urlStr);
            return uri.getHost();
        } catch (URISyntaxException e) {
            log.error("URISyntaxException occurred while parsing URL: {}", urlStr);
            return null; // 返回 null 表示无法解析主机名
        }
    }

    /**
     * 获取给定URL字符串中的端口号
     * <p>
     * "http://example.com:8081/path" → 8081
     *
     * @param urlStr 一个符合URI规范的URL字符串
     * @return 如果URL中指定了端口号,则返回指定的端口号;若未指定端口号,返回默认端口8080;
     * 若URL字符串格式不正确,抛出URISyntaxException时,记录异常信息并返回-1
     */
    public int getPort(String urlStr) {
        try {
            URI uri = new URI(urlStr);
            int port = uri.getPort();
            if (port == -1) {
                return 8080;
            }
            return port;
        } catch (URISyntaxException e) {
            // 异常情况下,记录异常信息,可以根据实际情况选择日志框架(如SLF4J、Log4j等)
            log.error("发生URL语法异常:{} " + e.getMessage());
            return -1;
        }
    }
}

到了这里,关于网络编程常用方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java网络编程 - 网络编程介绍 - 网络通信三要素

    什么是网络编程 ? 网络编程可以让程序与网络上的其他设备中的程序进行数据交互。 网络编程基本模式 : 常见的通信模式有如下2种形式:Client-Server( CS: 客户端与服务器模式 ) 、 Browser/Server( BS: 浏览器与服务器模式 ) Client-Server(CS)模式 Browser/Server(BS)模式 实现网络编程关键的三

    2024年02月02日
    浏览(55)
  • 【网络编程】网络编程套接字(三)TCP网络程序

    与前边的UDP网络程序相同,创建套接字的接口都是socket,下边对socket接口进行介绍: 协议家族选择AF_INET,因为我们要进行网络通信。 而第二个参数,为服务类型,传入SOCK_STREAM,我们编写TCP程序,所以要选择流式的服务。 第三个参数默认传入0,由前两个参数就可以推出这是

    2024年02月16日
    浏览(62)
  • 【网络编程】网络编程套接字(一)

    端口号(port)是传输层协议的内容. 端口号是一个2字节16位的整数; 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理; IP地址 + 端口号能够标识网络上的某一台主机的某一个进程; 一个端口号只能被一个进程占用. 既然端口号是用来标识一个进程,

    2024年02月12日
    浏览(122)
  • 【网络编程】网络编程概念,socket套接字,基于UDP和TCP的网络编程

    前言: 大家好,我是 良辰丫 ,今天我们一起来学习网络编程,网络编程的基本概念,认识套接字,UDP与TCP编程.💞💞💞 🧑个人主页:良辰针不戳 📖所属专栏:javaEE初阶 🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。 💦期待大家三连,关注

    2023年04月20日
    浏览(61)
  • 【Linux网络编程】网络编程套接字二

    喜欢的点赞,收藏,关注一下把! TCP和UDP在编程接口上是非常像的,前面我们说过TCP是面向连接的,UDP我们上篇博客也写过了,我们发现UDP服务端客户端写好启动直接就发消息了没有建立连接。TCP是建立连接的,注定在写的时候肯定有写不一样的地方。具体怎么不一样,我们

    2024年04月15日
    浏览(64)
  • 【网络编程】Linux网络编程基础与实战第三弹——网络名词术语

    数据包从源地址到目的地址所经过的路径,由一系列路由节点组成。 某个路由节点为数据包选择投递方向的选路过程。 路由器工作原理 路由器是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号的设备。

    2024年02月08日
    浏览(46)
  • 【网络编程】网络编程 和 Socket 套接字认识

    ✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 用户在浏览器中,打开在线视频网站,如优酷看视频,实质是通过网络,获取到网络上的一个视频资源。 与本地打开视频文件类似,只是视频文件这个资源的来源是网络。 相比本地资源来说,网络提供了更为丰富的网络资源:

    2023年04月15日
    浏览(143)
  • 【C++】6.网络编程:网络编程(TCP&UDP)

    网络编程是C++ API操作中很重要的一部分,包含 TCP 和 UDP 。 网络传输模型可以抽象为7个层: 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 。 但在使用TCP/IP协议时,可以简化为这4层: 网络接口、网络层、传输层、应用层 。 TCP:可靠传输,三次握手建立

    2024年02月16日
    浏览(43)
  • 「网络编程」第二讲:网络编程socket套接字(一)

    「前言」文章是关于网络编程的socket套接字方面的,下面开始讲解! 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「每篇一句」 春风得意马蹄疾,一日看尽长安花。 ——孟郊《登科后》 目录 一、预备知识 1.1 源IP和目的IP 1.

    2024年02月09日
    浏览(63)
  • 网络编程——UDP编程

    在C语言中进行UDP编程的一般步骤如下: (1) 包含头文件 : 在代码中包含必要的头文件,以便使用UDP编程所需的函数和数据类型。通常情况下,你需要包含 sys/socket.h、netinet/in.h 和 arpa/inet.h。 (2) 创建套接字 : 使用 socket() 函数创建一个套接字,该套接字将用于网络通信

    2024年02月05日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包