网络编程.

2023-09-18 23:37:21

网络编程就相当于通过网络进行数据的传输,可以传给别人,不仅限于自己;

常见软件架构

BS优点

1.不需要开发客户端,只需要页面+服务器

2.不用下载

缺点

如果应用过大

cs优点

1.画面精美

缺点

1.客户端,服务端都要开发

三要素:

IP

设备在网络中的地址,是唯一的标识

端口号

应用程序在设备中唯一的标识

协议

数据在网络中传输的规则,常见的协议有UDP,TCP

UDP协议

  • 用户数据报协议
  • UDP是面向无连接通信协议。速度快,有大小限制(64K),数据不安全,易丢失数据

单播

组播

广播

发送信息


        //绑定端口,以后就是从这个端口往外发
        //空参:所有可用的端口随机一个进行使用
        //有参:指定端口号进行绑定
        //创建DatagramSocket对象
        DatagramSocket ds = new DatagramSocket();//单播,广播
        //MulticastSocket ms = new MulticastSocket();//组播


        //打包数据
        String str = "我超牛";
        byte[]bytes = str.getBytes();
        InetAddress address = InetAddress.getByName("127.0.0.1");
        int port = 10086;

        //DatagramPacket(传输的信息,传输的信息的长度,ip,端口号);
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length,address,port);

        //发送数据
        ds.send(dp);

        ds.close();

接收信息

//创建对象
        //在接收的时候一定要绑定端口
        //绑定的端口一定要与发送的端口保持一致


        DatagramSocket ds = new DatagramSocket(10086);

        //组播接收数据
        // InetAddress address = InetAddress.getByName("224.0.0.1");
        //ms.joinGroup(address);

        //接收数据包
        byte[]bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
        ds.receive(dp);

        //解析数据包
        byte[]data = dp.getData();
        int len = dp.getLength();
        InetAddress address = dp.getAddress();
        int port = dp.getPort();

        System.out.println(new String(data,0,len));
        ds.close();

TCP协议

  • 传输控制协议
  • TCP是面向连接的通信协议
  • 速度慢,没有大小限制,数据安全

客户端

①创建客户端的Socke对象与指定服务器连接

②获取输入流,写数据

③释放资源

服务器

①创建客户端的Socke对象(SeverSocket)

②监听客户端连接,返回Socket对象

③获取输入流,读数据,并把数据显示在控制台

④释放资源

俩者连接的底层原理

服务端先运行,等待客户端的连接(三次握手协议保证连接的建立)

断开连接的底层原理是四次挥手协议

三次握手:客户端向服务端申请连接,服务端返回一个响应,客户端再次发送确认信息,完成连接(确保连接)

四次挥手:客户端发出取消连接,服务端返回一个响应表示收到,服务端将剩下的数据处理完毕再向客户端发送确认信息,客户端接收并确认,连接断开(确保断开,且数据处理完毕)

更多推荐

如何解决 503 Service Temporarily Unavailable?

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🐅🐾猫头虎建议程序员必备技术栈一览表📖:🛠️全栈技术FullStack:📚MERN/MEAN/MEVNStack|🌐Jamstack|🌍GraphQL|🔁RESTfulAPI|⚡WebSockets|🔄CI/CD|🌐Git&Versio

一篇让你使用vue-cli搭建SPA项目

目录一.Vue-CLi二.SAP项目三.为什么使用vue-cli搭建SPA项目四.SPA项目的搭建4.1.检查4.2.安装4.3.构建4.4.启动4.5.导入​编辑五.路由及嵌套使用5.1.路由5.2.嵌套好啦今天到这了,希望能帮到你!!!一.Vue-CLiVueCLI是一个基于Vue.js快速开发单页应用的脚手架工具

2023-09-21力扣每日一题

链接:2603.收集树中金币题意一个无向无根树,每个点上有Coins[T]个金币,每次你可以选择吸收离自己距离小于等于2的节点的所有金币,也可以移动到相邻格子上,求全部吸完最小的移动次数(任选起点,但吸完要返回起点)解:由于计算的是移动次数,所以你可以认为一直在吸,走到哪儿吸到哪儿计算最后移动次数很简单,由于要回到起点

【开发工具】idea 的全局搜索快捷键(Ctrl+shift+F)失效

文章目录前言1.取消输入法的快捷键(推荐使用)2.更改idea的快捷键3.热键占用总结前言当你发现在idea中看到用于全局搜索的快捷键就是Ctrl+shift+F,可是怎么按都不管用的时候,你就不要再执着于自己的操作继续狂点电脑按键了,因为可能根本就不是你的问题,而是微软的问题哟!!当我们在使用快捷键失效的时候,排除掉

24个Docker常见问题处理技巧

1.Docker迁移存储目录默认情况系统会将Docker容器存放在var/lib/docker目录下[问题起因]今天通过监控系统,发现公司其中一台服务器的磁盘快慢,随即上去看了下,发现/var/lib/docker这个目录特别大。由上述原因,我们都知道,在/var/lib/docker中存储的都是相关于容器的存储,所以

黑马头条 后端项目部署_持续集成 Jenkins配置

项目部署_持续集成1今日内容介绍1.1什么是持续集成持续集成(Continuousintegration,简称CI)指的是,频繁地(一天多次)将代码集成到主干持续集成的组成要素一个自动构建过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预。一个代码存储库,即需要版本控制软件来保障代码

【操作系统】聊聊进程间通信方式

作为操作系统软件治理的核心进程,那么进程间通信的方式就非常重要,常见的比如管道、消息队列、共享内存、信号量、信号、Socket等。本篇主要简单介绍下我们知道每个进程都有自己独立的用户空间,而内核空间是共享的。管道ps-ef|grepmysql其中的|就是一个管道符,只能进行单向传输数据。mkfifomyPipe创建一个

数字孪生技术如何提升工厂生产效率?

数字孪生技术是一项引领工业界数字化转型的创新力量。随着工业4.0时代的到来,制造业正经历着巨大的变革,数字孪生技术在这个变革中发挥了关键作用。它不仅仅是一种技术,更是一种理念,将现实世界与数字世界相结合,为工厂带来了前所未有的机遇和挑战。工厂数字化转型的目标是提高生产效率、降低成本、提升质量,并实现更灵活的生产。数字孪

记一次 .NET 某电力系统 内存暴涨分析

一:背景1.讲故事前些天有位朋友找到我,说他生产上的程序有内存暴涨情况,让我帮忙看下怎么回事,最简单粗暴的方法就是让朋友在内存暴涨的时候抓一个dump下来,看一看大概就知道咋回事了。二:Windbg分析1.到底是谁吃了内存这个问题说的再多也不为过,一定要看清楚这个程序是如何个性化发展的,可以使用!address-sum

课程学习成绩评分F2计算器

前言:由于大二的时候计算成绩太麻烦了,特别是综测评定小组还需要验证其他同学的是否正确,对于这种重复性高的工作,首先要想到的就是用计算机来实现,想起来上学期学了一点Java,就想简单的写一个程序。C++因为我们是知道他的公式的,所以就是输入数据就能够得到最终的结果。最开始我也不是直接就开始想到用Java来写的,最开始只是

【Vue】模块基本语法

🎉🎉欢迎来到我的CSDN主页!🎉🎉🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚🌟在这里,我要推荐给大家我的专栏《Vue快速入门》。🎯🎯🚀无论你是编程小白,还是有一定基础的程序员,这个专栏都能满足你的需求。我会用最简单易懂的语言,带你走进Vue的世界,让你从零开始,一步步成为前端大师。�

热文推荐