【网络编程系列】网络编程实战

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

      • 1.InetAddress
      • 2.socket 套接字
      • 3.文件上传下载
      • 4.UDP
      • 5.chat
      • 6.双人交流
      • 7.URL

1.InetAddress

InetAddress常用方法如下:

public static void main(String[] args) throws Exception {//获取本机地址信息InetAddress localIp = InetAddress.getLocalHost();log.info("localIp.getCanonicalHostName()=" + localIp.getCanonicalHostName());//localhostlog.info("localIp.getHostAddress()=" + localIp.getHostAddress());//127.0.0.1log.info("localIp.getHostName()=" + localIp.getHostName());//qinyingjiedeMacBook-Pro.locallog.info("localIp.toString()=" + localIp.toString());//qinyingjiedeMacBook-Pro.local/127.0.0.1log.info("localIp.isReachable(5000)=" + localIp.isReachable(3000));//true//获取指定域名地址信息log.info("====================================");InetAddress baiduIp = InetAddress.getByName("www.baidu.com");log.info("baiduIp.getCanonicalHostName()=" + baiduIp.getCanonicalHostName());//14.119.104.189log.info("baiduIp.getHostAddress()=" + baiduIp.getHostAddress());//14.119.104.189log.info("baiduIp.getHostName()=" + baiduIp.getHostName());//www.baidu.comlog.info("baiduIp.toString()=" + baiduIp.toString());//www.baidu.com/14.119.104.189log.info("baiduIp.isReachable(5000)=" + baiduIp.isReachable(5000));//falselog.info("====================================");//获取指定原始IP地址信息InetAddress ip = InetAddress.getByAddress(new byte[]{127, 0, 0, 1});log.info("ip.getCanonicalHostName()=" + ip.getCanonicalHostName());//localhostlog.info("ip.getHostAddress()= " + ip.getHostAddress());//127.0.0.1log.info("ip.getHostName()=" + ip.getHostName());//localhostlog.info("ip.toString()=" + ip.toString());//localhost/127.0.0.1log.info("ip.isReachable(5000)=" + ip.isReachable(5000));//true
}

2.socket 套接字

客户端

public class Basic_001_Client {public static void main(String[] args) throws Exception {InetAddress inetAddress = InetAddress.getByName("127.0.0.1");int port = 9999;Socket socket = new Socket(inetAddress, port);OutputStream outputStream = socket.getOutputStream();outputStream.write("你好".getBytes());outputStream.close();socket.close();}
}

服务端

@Slf4j
public class Basic_002_Server {public static void main(String[] args) throws Exception {ServerSocket serverSocket = new ServerSocket(9999);while (true) {Socket socket = serverSocket.accept();InputStream inputStream = socket.getInputStream();ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();final byte[] buffer = new byte[1024];int len = 0;while ((len = inputStream.read(buffer)) != -1) {byteArrayOutputStream.write(buffer, 0, len);}log.info(byteArrayOutputStream.toString());byteArrayOutputStream.close();inputStream.close();socket.close();}}
}

3.文件上传下载

客户端

public class File_001_client {public static void main(String[] args) throws Exception {//1.创建一个socketSocket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);//2.创建一个输出流OutputStream os = socket.getOutputStream();//3.文件流final FileInputStream fileIs = new FileInputStream("/Users/qinyingjie/Documents/idea-workspace/ant/ant-netty/src/main/java/Electron.png");//4.写出文件final byte[] buffer = new byte[1024];int len = 0;while ((len = fileIs.read(buffer)) != -1) {os.write(buffer, 0, len);}//5.关闭资源fileIs.close();os.close();socket.close();}
}

服务端

public class File_002_server {public static void main(String[] args) throws Exception {//1.创建服务ServerSocket serverSocket = new ServerSocket(9000);//2.监听客户端连接Socket socket = serverSocket.accept();//3.获取输入流InputStream inputStream = socket.getInputStream();//4.文件输出FileOutputStream fileOut = new FileOutputStream("/Users/qinyingjie/Documents/idea-workspace/ant/ant-netty/src/main/java/receive.png");final byte[] buffer = new byte[1024];int len;while ((len = inputStream.read(buffer)) != -1) {fileOut.write(buffer, 0, len);}//5.关闭资源fileOut.close();inputStream.close();socket.close();}
}

4.UDP

udp 没有客户端服务端的概念,主要是为了演示

客户端

public class UDP_001_client {public static void main(String[] args) throws Exception {//1.创建一个socketDatagramSocket socket = new DatagramSocket();//2.建立一个包String msg = "你好";final InetAddress inetAddress = InetAddress.getByName("localhost");int port = 9090;DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, inetAddress, port);//3.发送socket.send(packet);//4.关闭资源socket.close();}
}

服务端

@Slf4j
public class UDP_002_server {public static void main(String[] args) throws Exception {//1.创建socketDatagramSocket socket = new DatagramSocket(9090);//2.接收数据包final byte[] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);socket.receive(packet);log.info(packet.getAddress().getHostAddress());log.info(new String(packet.getData(), 0, packet.getLength()));//3.关闭资源socket.close();}
}

5.chat

send 方

public class Chat_001_send {public static void main(String[] args) throws Exception {//1.创建一个socketDatagramSocket socket = new DatagramSocket(8888);//2.控制台输入final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));while (true) {final String data = reader.readLine();final byte[] datas = data.getBytes();final DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress("localhost", 6666));//3.发送socket.send(packet);if (StringUtils.equalsIgnoreCase(data, "bye")) {break;}}//4.关闭资源socket.close();}
}

receive 方

@Slf4j
public class Chat_002_receive {public static void main(String[] args) throws Exception {//1.创建socketDatagramSocket socket = new DatagramSocket(6666);while (true) { //2.接收数据包final byte[] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);socket.receive(packet);//断开连接 byefinal byte[] data = packet.getData();final String receive = new String(data, 0, packet.getLength());log.info(receive);if (StringUtils.equalsIgnoreCase(receive, "bye")) {break;}}//3.关闭资源socket.close();}
}

6.双人交流

@Slf4j
public class TalkReceive implements Runnable {private DatagramSocket socket;private final int port;private final String msgFrom;@SneakyThrowspublic TalkReceive(int port, String msgFrom) {this.port = port;this.msgFrom = msgFrom;this.socket = new DatagramSocket(port);}@SneakyThrows@Overridepublic void run() {//1.创建socketwhile (true) { //2.接收数据包final byte[] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);socket.receive(packet);//断开连接 byefinal byte[] data = packet.getData();final String receive = new String(data, 0, packet.getLength());log.info(msgFrom + ": " + receive);if (StringUtils.equalsIgnoreCase(receive, "bye")) {break;}}//3.关闭资源socket.close();}
}
public class TalkSend implements Runnable {DatagramSocket socket;BufferedReader reader;private final int fromPort;private final String toIp;private final int toPort;public TalkSend(int fromPort, String toIp, int toPort) throws Exception {this.fromPort = fromPort;this.toIp = toIp;this.toPort = toPort;//1.创建一个socketthis.socket = new DatagramSocket(fromPort);//2.控制台输入this.reader = new BufferedReader(new InputStreamReader(System.in));}@SneakyThrows@Overridepublic void run() {while (true) {final String data = reader.readLine();final byte[] datas = data.getBytes();final DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(this.toIp, this.toPort));//3.发送socket.send(packet);if (StringUtils.equalsIgnoreCase(data, "bye")) {break;}}//4.关闭资源socket.close();}
}
public class TalkStuden {public static void main(String[] args) throws Exception {new Thread(new TalkSend(7777, "localhost", 9999)).start();new Thread(new TalkReceive(8888, "老师")).start();}
}
public class TalkTeacher {public static void main(String[] args) throws Exception {new Thread(new TalkSend(5555, "localhost", 8888)).start();new Thread(new TalkReceive(9999, "学生")).start();}
}

image-20230319123014292

image-20230319123025240

7.URL

@Slf4j
public class UrlDemo {public static void main(String[] args) throws Exception {final URL url = new URL("http://localhost:8080/helloworld/index.jsp?username=kuangshen&password=123");log.info(url.getAuthority());//localhost:8080log.info(url.getPath());///helloworld/index.jsplog.info(url.getProtocol());//httplog.info(url.getHost());//localhostlog.info(url.getFile());///helloworld/index.jsp?username=kuangshen&password=123log.info(url.getUserInfo());//nulllog.info(url.getQuery());//username=kuangshen&password=123log.info(url.getRef());//nulllog.info(String.valueOf(url.getDefaultPort()));//80log.info((String) url.getContent());}
}

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/40018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Vue.js框架的指令和事件绑定实现一个购物车的页面布局

使用了v-model指令来实现全选/全不选的功能,当全选框被点击时,isAllChecked的值会被改变。使用了v-if指令来判断购物车中是否有商品,如果有商品则渲染商品列表,否则显示购物车为空的提示。使用了v-for指令来遍历datalist数组&…

jvm内存溢出排查(使用idea自带的内存泄漏分析工具)

文章目录 1.确保生成内存溢出文件2.使用idea自带的内存泄漏分析工具3.具体实验一下 1.确保生成内存溢出文件 想分析堆内存溢出,一定在运行jar包时就写上参数-XX:HeapDumpOnOutOfMemoryError,可以看我之前关于如何运行jar包的文章。若你没有写。可以写上…

Keepalived入门指南:实现故障转移和负载均衡

文章目录 一、简介1. Keepalived概述2. 高可用性和负载均衡的重要性 二、故障转移1. 什么是故障转移2. Keepalived的故障转移原理a) VRRP协议b) 虚拟路由器ID和优先级 3. 配置Keepalived实现故障转移a) 主备服务器的设置b) 监控网络接口c) 虚拟IP的配置d) 备份服务器接管流程 三…

Python学习笔记_基础篇(九)_面向对象编程

本篇内容: 1、反射2、面向对象编程3、面向对象三大特性4、类成员5、类成员修饰符6、类的特殊成员7、单例模式 反射 python中的反射功能是由以下四个内置函数提供:hasattr、getattr、setattr、delattr,改四个函数分别用于对对象内部执行:检…

el-form自定义校验规则

Vue 的 el-form 组件可以使用自定义校验规则进行表单验证。自定义校验规则可以通过传递一个函数来实现,该函数接受要校验的字段的值作为参数,并返回一个布尔值或一个 Promise 对象。 下面是一个示例,演示如何在 el-form 中使用自定义校验规则…

若依前端npm run dev启动时报错

本文主要解决问题:若依前端npm run dev启动时报错,解决办法。 目录 1、第1种解决方案(亲测有效) 2、第2种解决方案(亲测有效) Error: error:0308010C:digital envelope routines::unsupportedat new Hash (node:internal/crypto/hash:67:19)at Object.createHash (node…

解决 adb install 错误INSTALL_FAILED_UPDATE_INCOMPATIBLE

最近给游戏出包,平台要求 v1 签名吧,AS 打包后,adb 执行安装到手机,我用的设备是google pixel6 , android 系统 13, 提示如下: adb install -r v5_android_202308161046.apk Performing Streamed Install a…

centos 安装.net 6 sdk

按照以下步骤在 CentOS 上安装 .NET 6 SDK: 更新系统: sudo yum update安装依赖项: sudo yum install -y curl libunwind libicu下载并添加 Microsoft 的软件包存储库密钥: sudo rpm -Uvh https://packages.microsoft.com/config/…

单片机第一季:零基础13——AD和DA转换

1,AD转换基本概念 51 单片机系统内部运算时用的全部是数字量,即0 和1,因此对单片机系统而言,无法直接操作模拟量,必须将模拟量转换成数字量。所谓数字量,就是用一系列0 和1 组成的二进制代码表示某个信号大…

Linux -- 进阶 Autofs自动挂载服务 实验详解

服务端创建共享目录, 客户端实现自动挂载 第一步 : 客户端,服务端 均关闭安全软件 [rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld [rootnode1 ~]# setenforce 0 [rootnode1 ~]# systemctl stop firewalld 第二…

在K8s上处理nginx

基本说明 创建一个名为ssl的TLS类型的Secret对象,用于存储证书和密钥信息。 kubectl create secret tls ssl --certserver.crt --keyserver.key配置Nginx的events块,设置worker连接数为1024。 events {worker_connections 1024; }配置Nginx的http块&a…

MyBaits(单独使用,与整合无关)小白版

文章目录 概述比较配置写xml加载上面配置并执行加载配置的方法方式一 执行方法方式一方式二(MyBatis映射器) 写配置文件的映射文件设置对象的别名(简写)获取自动生成的主键 查询结果和java的映射规则基本类型映射:简单对象映射:嵌…

加盐加密算法

MD5加密加盐加密项目密码升级 MD5加密 MD5一系列公式进行复杂数学运算;特点:(用途校验和、计算hash值方式、加密) 1:定长;无论原始数据多长;算出的结果都是4或者8字节的版本。 2:冲…

Java多线程实战

Java多线程实战 java多线程(超详细) java自定义线程池总结 Java创建线程方式 方法1,继承Thread类 方法2,实现Runable接口 方法2-2,匿名内部类形式lambda表达式 方法3,实现Callable接口,允许…

【深入理解Linux内核锁】三、原子操作

我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强企业! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录 1、原子操作思想2、整型变量原子操作2.1 API接口2.2 API实现2.2.1 原子变量结…

Shell 函数

Shell 函数 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。 shell中函数的定义格式如下: [ function ] funname [()] { action; [return int;] } 说明: 1、可以带function fun() 定义,也可以直接fun…

log4j:WARN No appenders could be found for logger问题

本文将idea场景下的使用。 IDEA中,将配置文件命名为log4j.properties(该命名才会被自动加载), 并放到某个目录下(通常放到resources目录),并在resources上右键,找到Mark Directory a…

微信程序 自定义遮罩层遮不住底部tabbar解决

一、先上效果 二 方法 1、自定义底部tabbar 实现: https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html 官网去抄 简单写下:在代码根目录下添加入口文件 除了js 文件的list 需要调整 其他原封不动 代码&#xf…

Hadoop数据迁移distcp

Hadoop数据迁移distcp 准备工作 确认源集群(a),目标集群(b)确认a集群的主节点和b集群的主节点确认两个集群的网络相通确认迁移模式(全量迁移还是增量迁移),这里选择全量迁移 迁移文件 迁移t…

【路由协议】使用按需路由协议和数据包注入的即时网络模拟传递率(PDR)、总消耗能量和节点消耗能量以及延迟研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…