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

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
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,一经查实,立即删除!

相关文章

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

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

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

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

解决 adb install 错误INSTALL_FAILED_UPDATE_INCOMPATIBLE

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

单片机第一季:零基础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 第二…

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 原子变量结…

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…

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

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

斯坦福「小镇」开源AI智能体;小米应用商店将要求AI应用符合资质标准

🦉 AI新闻 🚀 斯坦福「小镇」开源AI智能体 摘要:斯坦福研究人员开源了一个类似《西部世界》的数字化「小镇」,里面有25个AI智能体可以生活、工作、社交。这项研究被视为AGI的重要开端,可能会改变游戏、企业应用领域。网友期待这项技术改善游戏NPC的交互…

PyMuPDF`库实现PDF旋转功能

本文介绍了一个简单的Python应用程序,用于将PDF文件转换为旋转90度的PDF文件。主要用于csdn网站中导出的博客pdf是横向的,看起来不是很方便,才想到用python编制一个将pdf从横向转为纵向的功能。 功能 该PDF转换工具具有以下功能&#xff1a…

信息安全:防火墙技术原理与应用.

信息安全:防火墙技术原理与应用. 防火墙是网络安全区域边界保护的重要技术。为了应对网络威胁,联网的机构或公司将自己的网络与公共的不可信任的网络进行隔离,其方法是根据网络的安全信任程度和需要保护的对象,人为地划分若干安全…

C#工程建立后修改工程文件名与命名空间

使用之前的项目做二次开发,项目快结束的时候,需要把主项目的名称修改成我们想要的。 之前从来没有这么干过,记录一下。 步骤如下: 1:打开vs2010项目解决方案,重命名,如下图所示: …

设计模式之原型模式Prototype的C++实现

1、原型模式提出 在软件功能设计中,经常面临着“某些结构复杂的对象”的创建工作,且创建的对象想拥有其他对象在某一刻的状态,则可以使用原型模型。原型模型是通过拷贝构造函数来创建对象,并且该对象拥有其他对象在某一刻的状态。…

Docker基础入门:镜像、容器导入导出与私有仓库搭建

Docker基础入门:镜像导入导出与私有仓库搭建 一、 Docker镜像、容器的导入和导出1.1、Docker镜像的导出1.2、Docker镜像的载入1.3、Docker容器的导出1.4、Docker容器的导入 二、 镜像和容器导出和导入的区别:三、commit操作_本地镜像发布到阿里云3.1、commit操作有关…

ppt中线材相交接的地方,如何绘画

ppt中线材相交接的地方: 在ppt中绘画线材相互交接的地方: 1.1绘图工具中的“弧形” 1.2小技巧 “弧形”工具点一下,在ppt中如下 1.3拖动活动点进行调整图形 1.4绘画圆弧 1.5调整“圆弧”的大小,鼠标放在“黄色点”位置&#xf…

【JVM】垃圾回收算法

目录 一、判断对象已“死” 1.1、引用计数算法 1.2、可达性分析算法 1.3、引用的概念 二、垃圾收集算法理论 2.1、分代收集理论 三、垃圾收集算法 3.1、标记--清除算法 3.2、标记--复制算法 3.3、标记--整理算法 一、判断对象已“死” 在堆里面存放着Java世界中几乎所…