网络编程学习

news2024/9/23 23:31:59

网络编程

软件结构

  • C/S结构:QQ、迅雷、百度网盘
    • 程序员:开发客户端和服务端程序
    • 用户:需要下载升级更新客户端
    • 对网络带宽要求相对较低
    • 数据安全性相对较高
  • B/S结构:IE、谷歌、火狐
    • 程序员:只需要开发服务端程序
    • 用户:用户无需下载客户端
    • 对网络带宽要求相对较高,不适合游戏软件
    • 数据安全性相对较高

网络通信协议

通信协议指计算机相互沟通时发送数据的规则。这些规则规定了发送数据的格式、传递的速度、传输的步骤。
在这里插入图片描述

  • TCP/IP协议(实际模型)
    • 应用层:HTTP
    • 传输层: TCP/UDP
    • 网络层: IP、ICMP、ARP
    • 物理+数据链路层:Link

TCP和UDP的区别

TCP和UDP是传输层的协议,其中TCP是面向连接的协议,UDP是不面向连接的协议。

  • UDP 不用建立连接即可发送
    • 比如发短信
    • 传输的数据量有限
    • 数据不可靠
  • TCP 建立连接后才能发送
    • 比如打电话
    • 理论上数据量无限制
    • 效率相对较低
    • 数据可靠

网络编程三要素

  • 协议
  • IP地址:电脑的编号,唯一标识。
    • ipv4和ipv6
    • 常用命令:
      • ipconfig / all
      • ping 网址
    • 因特网和局域网
    • 子网掩码:划分网络地址和主机地址
    • DHCP服务器:自动分配IP地址
    • DNS服务器:域名解析服务器
  • 端口:计算机进程的唯一标识
    • Tomcat 8080
    • MySQL 3306
    • Oracle 1521

IP + 端口 = 网络中运行进程的唯一标识

TCP协议模拟实现

这里是使用TCP协议来实现一个从客户端发送数据到服务器端的代码。
客户端:

public class TcpClient {
    public static void main(String[] args) throws IOException {
        //创建客户端Socket对象
        Socket socket = new Socket("192.168.16.76",12306);//插座

        //通过socket获取输出流
        OutputStream os = socket.getOutputStream();
        
        //创建文件对象
        File file = new File("test/server.txt");
        String filename = file.getName();

        //创建数据流上传文件名
        DataOutputStream dos = new DataOutputStream(os);
        dos.writeUTF(filename);

        //创建高效流读取文件数据
        BufferedOutputStream bos = new BufferedOutputStream(os);
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
        
        //循环读写数据
        byte[] bytes = new byte[1024];
        int len;
        while((len = bis.read(bytes))!=-1){
            bos.write(bytes,0,len);
        }
        bos.close();
        bis.close();
        os.close();
        socket.close();
    }
}

服务器端
接收线程类:

public class TcpServerThread extends Thread{

    private Socket socket;

    public TcpServerThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try {
            //3.获取输入流
            InputStream is = socket.getInputStream();

            BufferedInputStream bis = new BufferedInputStream(is);
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("test/server.txt"));

            //获取客户端的IP地址
            InetAddress inetAddress = socket.getInetAddress();
            String hostAddress = inetAddress.getHostAddress();

            System.out.println("文件上传服务器启动");

            //System.out.println(hostAddress+"客户端正在上传文件");
            byte[] bys = new byte[1024];
            int len;
            while((len = bis.read(bys))!=-1){
                bos.write(bys,0,len);
            }
            System.out.println("文件上传成功");
            bos.close();
            bis.close();
            is.close();
            //serverSocket.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

文件接收类:

public class UploadServer {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(12380);
        System.out.println("文件上传服务器启动");
        while(true){
            Socket clientSocket = ss.accept();
            new TcpServerThread(clientSocket).start();
        }
    }
}

UDP模拟实现

发送端:

public class UDP_send {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds = new DatagramSocket();

        byte[] bytes = "hello, udp".getBytes();
        int len = bytes.length;
        InetAddress ip = InetAddress.getByName("10.10.0.28");//192.168.16.76
        //创建数据包
        DatagramPacket dp = new DatagramPacket(bytes, len, ip, 10086);

        ds.send(dp);

        ds.close();
    }
}

接收端:

public class UDP_receive {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds = new DatagramSocket(10086);

        //创建一个空的包裹
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);

        //接收数据到包裹
        ds.receive(dp);

        //解析包裹
        byte[] data = dp.getData();
        int length = dp.getLength();
        String s = new String(data, 0, length);
        System.out.println("s = " + s);
        InetAddress address = dp.getAddress();
        System.out.println("address = " + address);

        String hostAddress = dp.getAddress().getHostAddress();
        System.out.println("hostAddress = " + hostAddress);

    }
}

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

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

相关文章

泛微E-Office任意文件上传漏洞复现

0x01 产品简介 泛微E-Office是一款标准化的协同 OA 办公软件,泛微协同办公产品系列成员之一,实行通用化产品设计,充分贴合企业管理需求,本着简洁易用、高效智能的原则,为企业快速打造移动化、无纸化、数字化的办公平台。 0x02 漏…

【云原生,k8s】基于Helm管理Kubernetes应用

第四阶段 时 间:2023年8月18日 参加人:全班人员 内 容: 基于Helm管理Kubernetes应用 目录 一、Kubernetes部署方式 (一)minikube (二)二进制包 (三)Kubeadm …

米尔瑞萨RZ/G2L开发板-02 ffmpeg的使用和RTMP直播

最近不知道是不是熬夜太多,然后记忆力减退了? 因为板子回来以后我就迫不及待的试了一下板子,然后发现板子有SSH,但是并没有ffmpeg,最近总是在玩,然后今天说是把板子还原一下哇,然后把官方的固件…

Linux系统之wget命令的基本使用

Linux系统之wget命令的基本使用 一、wget命令介绍二、本次实践环境三、wget命令的使用帮助3.1 wget命令的基本语法3.2 wget选项解释 四、安装wget工具4.1 检查yum仓库状态4.2 安装wget工具 五、wget命令的基本使用5.1 直接下载文件5.2 下载时指定文件名5.3 后台下载文件5.4 限速…

视频汇聚/视频云存储/视频监控管理平台EasyCVR如何进行CDN转推?

视频汇聚/视频云存储/集中存储/视频监控管理平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、云存储、智能分析等,视频智能分析平台EasyCVR融合性强、开放度…

postgresql中基础sql查询

postgresql中基础sql查询 创建表插入数据创建索引删除表postgresql命令速查简单查询计算查询结果 利用查询条件过滤数据模糊查询 创建表 -- 部门信息表 CREATE TABLE departments( department_id INTEGER NOT NULL -- 部门编号,主键, department_name CHARACTE…

【【verilog典型电路设计之FIR滤波器的设计】】

verilog典型电路设计之FIR滤波器的设计 我们常用的FIR滤波器称为有限冲激响应 是一种常用的数字滤波器 ,采用对已输入样值的加权和来形成它的输出。 对于输入序列X[n] 的FIR滤波器可用下图所示的结构示意图来表示,其中X[n] 是输入数据流。各级的输入连…

Idea中隐藏指定文件或指定类型文件

Setting ->Editor ->Code Style->File Types → Ignored Files and Folders输入要隐藏的文件名,支持*号通配符回车确认添加

微服务中间件--分布式事务

分布式事务 a.理论基础1) CAP定理2) BASE理论 b.Seata1) XA模式1.a) 实现XA模式 2) AT模式3) TCC模式3.a) 代码实现 4) Saga模式5) 四种模式对比6) TC的异地多机房容灾架构 a.理论基础 1) CAP定理 分布式系统有三个指标: Consistency(一致性&#xff…

计算机视觉之三维重建(二)(摄像机标定)

标定示意图 标定目标 P ′ M P w K [ R T ] P w P^{}MP_wK[R \space T]P_w P′MPw​K[R T]Pw​ 其中 K K K为内参数, [ R T ] [R \space T] [R T]为外参数。该式子需要使用至少六对内外点对进行求解内外参数(11个未知参数)。 其中 R 3 3 …

【快应用】快应用广告学习之激励视频广告

【关键词】 快应用、激励视频广告、广告接入 【介绍】 一、关于激励视频广告 定义:用户通过观看完整的视频广告,获得应用内相关的奖励。适用场景:游戏/快游戏的通关、继续机会、道具获取、积分等场景中,阅读、影音等应用的权益体系…

二、SQL,如何实现表的创建和查询

1、新建表格(在当前数据库中新建一个表格): (1)基础语法: create table [表名]( [字段:列标签] [该列数据类型] comment [字段注释], [字段:列标签] [该列数据类型] comment [字段注释], ……&#xff0c…

Spring Clould 服务间通信 - Feign

视频地址:微服务(SpringCloudRabbitMQDockerRedis搜索分布式) Feign-基于Feign远程调用(P30) 先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: 代码可读性差&#xff0c…

字符设备驱动分布注册

驱动文件: 脑图: 现象:

初识Sentinel

目录 1.解决雪崩的方式有4种: 1.1.2超时处理: 1.1.3仓壁模式 1.1.4.断路器 1.1.5.限流 1.1.6.总结 1.2.服务保护技术对比 1.3.Sentinel介绍和安装 1.3.1.初识Sentinel 1.3.2.安装Sentinel 1.4.微服务整合Sentinel 2.流量控制 2.1.簇点链路 …

设计必备:6个免费PNG图片素材网站推荐

本文推荐了6个PNG图片素材网站,种类繁多、质量上乘,完全免费下载。这些网站收录了海量经过抠图处理的PNG图片,设计师无需操心抠图,直接搜索下载需要的图片进行创作,可以极大地提高工作效率,节约时间成本。获取这些高质量的PNG图片素材,你就可以无后顾之忧地进行创作设计了。不用…

Hive的窗口函数与行列转换函数及JSON解析函数

1. 系统内置函数 查看系统内置函数:show functions ; 显示内置函数的用法: desc function lag; – lag为函数名 显示详细的内置函数用法: desc function extended lag; 1.1 行转列 行转列是指多行数据转换为一个列的字段。 Hive行转列用到的函数 con…

内网穿透——使用Windows自带的网站程序建立网站

文章目录 1.前言2.Windows网页设置2.1 Windows IIS功能设置2.2 IIS网页访问测试 3. Cpolar内网穿透3.1 下载安装Cpolar3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5.结语 1.前言 在网上各种教程和介绍中,搭建网页都会借助各种软件的帮助,比如…

什么是骨传导耳机?骨传导耳机伤耳膜吗?骨传导耳机科普来了!

骨传导耳机是一种以骨骼为传导介质的耳机,因为佩戴时候传音是通过骨骼来传递,骨传导耳机不会堵塞耳道,也不需要依赖耳膜传递声音,有效地保护听力。因此,骨传导耳机的问世为人们提供了全新的选择。 随着骨传导耳机被越来…

Redis监听Key的过期事件

前言 试想一个业务场景,订单超过30分钟未支付需要做自动关单处理,修改订单状态,库存回退等,你怎么实现?方案一:可以使用定时任务扫表,通过支付状态和下单时间来判断是否支付过期。但是这样的方案是非常消耗…