初识网络编程

news2025/1/23 14:54:37

一、概述

  • 地球村:亦称世界村,是通过电子媒介将世界紧密联系起来的形象表达,是信息网络时代的集中体现

  • TCP和UDP:

    • TCP:打电话 -->连接 -->接了 -->通话

    • UDP:发送完即可 -->接收

  • 计算机网络:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统

  • 网络编程的目的:无线电台...传播交流信息,数据交换,通信

  • 想要达到这个效果需要什么:

    • 如何准确的定位网络上的一台主机 IP+:+端口,定位到这个计算机上的某个资源

    • 找到了这个主机,如何传输数据呢

javaweb : 网页编程 B/S

网络编程:TCP/IP C/S


二、网络通信的要素

如何实现网络的通信:

通信双方地址:

  • IP

  • 端口号

规则:网络通信的协议

http,ftp,smtp,tcp,udp...

TCP/IP参考模型:

小结:

  • 网络编程中有两个主要的问题:

    • 如何准确定位到网络上的一台或者多台主机

    • 找到主机之后如何进行通信

  • 网络编程中的要素

    • IP和端口号 IP

    • 网络通信写协议 UDP TCP

  • 万物皆对象


三、IP

ip地址:InetAddress

  • 唯一定义一台网络上计算机

  • 127.0.0.1:本机localhost

  • ip地址的分类

    • IP地址分类 ipv4/ipv6

      • ipv4 127.0.0.1 由四个字节组成,0~255,可有42亿个,30亿都在北美,亚洲4亿,2011年就用尽

      • ipv6 fe80::915d:470e:d522:4339%16 128位,8个无符号整数

    • 公网(互联网)·私网(局域网)

      • 192.168.xx.xx 专门给组织内部使用的

      • ABCD类地址

  • 域名:记忆IP问题

    • IP:www.vip.com www.baidu.com

//测试IP
public class TestInetAddress {
    public static void main(String[] args) {
        try {
            //查询本机地址
            InetAddress inetAddress1 = InetAddress.getByName("127.0.0.1");
            System.out.println(inetAddress1);
            InetAddress inetAddress3 = InetAddress.getByName("localhost");
            System.out.println(inetAddress3);
            InetAddress inetAddress4 = InetAddress.getLocalHost();
            System.out.println(inetAddress4);
​
            System.out.println("=============");
            //查询网站ip地址
            InetAddress inetAddress2 = InetAddress.getByName("www.baidu.com");
            System.out.println(inetAddress2);
​
            //常用方法
            System.out.println(inetAddress2.getAddress());
            System.out.println(inetAddress2.getCanonicalHostName());//规范的名字
            System.out.println(inetAddress2.getHostAddress());//ip
            System.out.println(inetAddress2.getHostName());//域名,或者自己电脑的名字
        } catch (UnknownHostException e) {
            throw new RuntimeException(e);
        }
    }
}

四、端口

端口表示计算机上的一个程序的进程

  • 不同的进程有不同的端口号,用来区分软件

  • 被规定0~65535

  • TCP,UDP:65535*2 单个协议下端口号不能冲突

  • 端口分类

    • 公有端口:0~1023

      • HTTP : 80

      • HTTPS : 443

      • FTP : 21

      • SSH : 22

      • Telent:23

    • 程序注册端口:1024~49151,分配用户或者程序

      • Tomcat:8080

      • MySQL:3306

      • Oracle:1521

    • 动态、私有:49152~65535

netstat -ano #查看所有的端口
netstat -ano|findstr "5900" #查看指定的端口
tasklist|fiindstr "8696" #查看指定端口的进程
ctrl+shift+esc #打开任务管理器
public class TestInetSocketAddress {
    public static void main(String[] args) {
        InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1", 8080);
        System.out.println(inetSocketAddress);
        InetSocketAddress inetSocketAddress2 = new InetSocketAddress("localhost", 8080);
        System.out.println(inetSocketAddress2);
​
        System.out.println(inetSocketAddress.getAddress());
        System.out.println(inetSocketAddress.getHostName());//地址
        System.out.println(inetSocketAddress.getPort());//端口
    }
}

五、通信协议

协议:约定,就好比我们现在说的是普通话

网络通信协议:速率,传输码率,代码结构,传输控制

问题:非常的复杂

TCP/IP协议簇:实际上是一组协议

重要:

  • TCP:用户传输协议

  • UDP:用户数据报协议

出名的协议

  • TCP:用户传输协议

  • IP:网络互联协议

TCP和UDP的对比:

  • TCP:打电话

    • 连接,稳定

    • 三次握手,四次挥手

      最少需要三次,保证稳定连接
      A:你瞅啥?
      B:瞅你咋地?
      A:干一场!
      ​
      A:我要走了
      B:你真的要走了吗?
      B:你真的真的要走了吗?
      A:我真的真的要走了

    • 客户端、服务端

    • 传输完成,释放连接,效率低

  • UDP:发短信

    • 不连接,不稳定

    • 客户端、服务端:没有明确的界限

    • 不管有没有准备好,都可以发给你

    • 导弹

    • DDOS:洪水攻击!


六、TCP

客户端

  • 连接服务器Socket

  • 发送消息

服务器

  • 建立服务的端口 ServerSocket

  • 等待用户的链接 accept

  • 接受用户的消息

package day01;
​
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
​
/**
 * @Author: Grace
 * @Date: 2023/9/27 18:41
 * @Description:
 */
//服务端
public class TcpServerDemo01 {
    public static void main(String[] args) {
        ServerSocket serverSocket =null;
        ByteArrayOutputStream byteArrayOutputStream = null;
        InputStream inputStream=null;
        Socket accept=null;
​
        try {
            //1.我得有一个地址
             serverSocket = new ServerSocket(9999);
            //2.等待客户端连接过来
            while(true) {
                accept = serverSocket.accept();
                inputStream = accept.getInputStream();
           /* byte[] bytes = new byte[1024];
            int len;
            while((len= inputStream.read(bytes))!=-1){
                String s = new String(bytes, 0, len);
                System.out.println(s);
            }*/
                //管道流
                byteArrayOutputStream = new ByteArrayOutputStream();
                byte[] bytes = new byte[1024];
                int len;
                while ((len = inputStream.read(bytes)) != -1) {
                    byteArrayOutputStream.write(bytes, 0, len);
                }
​
                System.out.println(byteArrayOutputStream.toString());
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if(byteArrayOutputStream!=null) {
                try {
                    byteArrayOutputStream.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if(inputStream!=null){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if(accept!=null){
                try {
                    accept.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if(serverSocket!=null){
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
​
​
        }
    }
}
package day01;
​
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
​
/**
 * @Author: Grace
 * @Date: 2023/9/27 18:41
 * @Description:
 */
//客户端
public class TcpClientDemo01 {
    public static void main(String[] args) {
        Socket socket =null;
        OutputStream os =null;
        try {
            //1.要知道服务器的地址
            InetAddress serverIP = InetAddress.getByName("127.0.0.1");
            int port = 9999;
            //2.创建一个socket连接
             socket = new Socket(serverIP,port);
            //3.发送消息IO流
             os = socket.getOutputStream();
            os.write("你好铁锤".getBytes());
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            if(socket!=null){
                try {
                    socket.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            if (os!=null){
                try {
                    os.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}

七、TCP文件上传

public class TcpClientDemo02 {
    public static void main(String[] args) throws Exception {
        //1.建立一个Socket连接
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),9000);
        //2.创建一个输出流
        OutputStream os = socket.getOutputStream();
        //3.读取文件
        FileInputStream fis = new FileInputStream(new File("紫萍.jpg"));
        //4。写出文件
        byte[] bytes = new byte[1024];
        int len;
        while ((len = fis.read(bytes))!=-1){
            os.write(bytes,0,len);
        }
​
        //5.关闭资源
        fis.close();
        os.close();
        socket.close();
​
    }
}
package day01;
​
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
​
/**
 * @Author: Grace
 * @Date: 2023/9/27 19:14
 * @Description:
 */
public class TcpServerDemo02 {
    public static void main(String[] args) throws Exception {
        //1.创建服务
        ServerSocket serverSocket = new ServerSocket(9000);
        //2.监听客户端的连接
        Socket accept = serverSocket.accept();//阻塞式监听,会一直等待客户端连接
        //3.获取输入流
        InputStream is = accept.getInputStream();
        //4.文件输出
        FileOutputStream fos = new FileOutputStream(new File("receive"));
        byte[] bytes = new byte[1024];
        int len;
        while((len = is.read(bytes))!=-1){
            fos.write(bytes,0,len);
        }
        //5.关闭资源
        fos.close();
        is.close();
        accept.close();
        serverSocket.close();
    }
}

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

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

相关文章

QQ表情包存储位置解析

一些常见的设备和系统的QQ表情包存储位置: Windows系统: 路径:C:\Users[用户名]\Documents\Tencent Files[QQ号码]\Image\Image\CustomFace 在这个文件夹中,您可以找到所有自定义的QQ表情包。 Android系统: 路径&am…

程序开发常用在线工具汇总

菜鸟工具# https://c.runoob.com/ 编码# ASCII码# https://www.habaijian.com/ 在线转换# https://www.107000.com/T-Ascii/http://www.ab126.com/goju/1711.html Base64# 在线转换# https://www.qqxiuzi.cn/bianma/base64.htmhttp://www.mxcz.net/tools/Unicode.aspx …

软件架构的演化和维护

软件架构的演化和维护 定义 定义 顶不住了,刷题去了,不搞这个了,想吐。。。

STM32Cube 开发之读写内部Flash--电源项目ADC采样校准系数存储-实现掉电读取数据--STM32或者GD32F处理器

STM32Cube 开发之读写内部Flash–电源项目ADC采样校准系数存储-实现掉电读取数据 一、需求介绍 1.1 在进行电源项目开发中,输入与输出的电压电流经过硬件电路分压或者差分变换后,将低压的电压信号给到单片机如STM32F1系列单片机的ADC采样端口&#xff…

网速Full Power!这款4G网关信号达360度无死角

数字化转型浪潮下,如何实现可靠的无线互联成为制造企业面临的新课题。广州数智自动化最近通过部署星创SG500 4G网关,成功实现了某工业园区全域无线覆盖和多系统安全访问。 SG500支持全球主流的4G网络频段,可灵活搭配通信运营商,提供高达150Mbps的无线传输速率。它采用强大的四核…

性能压测工具:wrk

一般我们压测的时候,需要了解衡量系统性能的一些参数指标,比如。 1、性能指标简介 1.1 延迟 简单易懂。green:一般指响应时间 95线:P95。平均100%的请求中95%已经响应的时间 99线:P99。平均100%的请求中99%已经响应的时间 平…

三.vue2路由知识全总结

Vue Devtools:插件安装,展示模块中的数据 vue-router 应用场景:Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得轻而易举。 嵌套的路由/视图表模块化的、基于组件的路由配置路由参数、…

谷器数据参加世界制造业大会及数字化转型高峰论坛

9月20日至24日,由工业和信息化部、科技部、商务部、国务院国资委、中国工程院、安徽省人民政府等单位组织共同主办的2023世界制造业大会在合肥市滨湖国际会展中心盛大举行。谷器数据受邀出席,并同期参加”数字化转型高峰论坛”,与国家工信部相…

向量数据库X云计算驱动大模型落地电商行业,Zilliz联合AWS探索并贡献成熟解决方案

近日,由Zilliz 联合亚马逊云科技举办的【向量数据库 X 云计算 驱动大模型落地电商行业】活动在上海落幕,获得业内专业人士的广泛好评。 众所周知,大模型技术的发展正加速对千行万业的改革和重塑,向量数据库作为大模型的海量记忆体、云计算作为大模型的大算力平台,是大模型…

机器人中的数值优化|【五】BFGS算法非凸/非光滑处理

机器人中的数值优化|【五】BFGS算法的非凸/非光滑处理 往期内容回顾 机器人中的数值优化|【一】数值优化基础 机器人中的数值优化|【二】最速下降法,可行牛顿法的python实现,以Rosenbrock function为例 机器人中的数值优化|【三】无约束优化&#xff0…

微信里怎么添加阅读付费链接

在微信中添加阅读付费链接为主题,首先需要开通微信支付商户号,然后创建自定义菜单,并设置跳转到付费链接的逻辑。以下是详细步骤: 注册并开通微信支付商户号 在微信开放平台上注册并开通微信支付商户号。这一步需要营业执照、法…

企业如何识别和满足客户需求的5个要点

随着市场竞争的日益加剧,企业需要更加注重客户需求,以获得持续的发展。而企业在满足客户需求上,则需要遵循一些基本的原则和方法。本文将介绍企业识别和满足客户需求的5个要点。 1、理解客户 企业需要了解客户的需求、想法和行为&#xff0c…

Python 3.12.0 正式版即将发布!

导读Python 3.12.0 发布了第 2 个 RC 版本,也是最后一个 RC。正式版将于 2023 年 10 月 2 日星期一发布。 开发团队表示,进入候选版本阶段后,只接受经过 review 且修复明确错误的代码。RC2 是发现并修复重要问题的最后机会。 从该版本开始&a…

安装nvm包含卸载node及卸载nvm

卸载node 1、在命令行输入where node查看node所在位置,删除node.exe所在的父级文件夹 2、控制面板中程序卸载,卸载node.js 安装nvm 1、安装nvm-setup.exe 2、命令行运行nvm v,如果出现版本号表示安装成功 3、从node官网下载node版本&#…

事件循环——message loop

1 浏览器的进程模型 1.1 进程 程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程。 每个应用至少有一个进程,进程之前相互独立,即使要通信,也需要双方同意。比如:qq、微信、王者荣耀进程。 …

电视盒子什么牌子好?花费30天测评盘点超值电视盒子推荐

最近超多网友咨询我不知道电视盒子什么牌子好,为了推荐结果更客观公正,我将最热门的十款电视盒子买回来进行了一个月的深度测评,最终筛选了五款最优秀的电视盒子推荐给大家,不懂电视盒子怎么挑选那这篇文章就不能错过了。 1、泰捷…

3+单基因泛癌+铜死亡纯生信思路

今天给同学们分享一篇3单基因泛癌铜死亡纯生信思路的生信文章“Systematic pan-cancer analysis identifies SLC31A1 as a biomarker in multiple tumor types”,这篇文章于2023年3月27日发表在BMC Med Genomics 期刊上,影响因子为3.622。 溶质载体家族3…

uni-app:实现页面效果2(canvas绘制,根据页面宽度调整元素位置)

效果 代码 <template><view><!-- 车搭配指示器-双显 --><view class"content_position"><view class"content"><view class"SN"><view class"SN_title">设备1</view><view class…

java - 七大比较排序 - 详解

前言 本篇介绍了七大比较排序&#xff0c;直接插入排序&#xff0c;希尔排序&#xff0c;冒泡排序&#xff0c;堆排序&#xff0c;选择排序&#xff0c;快速排序&#xff0c;归并排序&#xff0c;一些简单思想代码实现&#xff0c;如有错误&#xff0c;请在评论区指正&#xf…

代码生活处处是代理--静态代理+动态代理的实现

你买房了吗&#xff1f;你买车了吗&#xff1f;你买啥啥啥了吗&#xff1f;现在这个社会除了物理物质我们离不开&#xff0c;还有一种角色也在潜移默化中渗透我们的生活。---中介 代理模式的思想是为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象。…