网络编程简单学习

news2024/11/28 16:43:32

目录

一、 概述

1. 什么是计算机网络?

2. 网络编程的目的

3. 需要达到什么样的效果?

二、 网络通信的两个要素

1. 通信双方地址

2. 规则:网络通信协议

三、IP地址

1. IP地址概述

2. IP地址分类

3. 域名

四、端口

五、通信协议

六、TCP实现聊天 

七、TCP文件上传实现

八、Tomcat

关于C/S与B/S的区别? 

 九、UDP

1. UDP消息发送

 2. UDP聊天实现

3. UDP实现多线程在线咨询

十、URL下载网络资源


一、 概述

1. 什么是计算机网络?

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

2. 网络编程的目的

进行信息交换、数据交换、通信

3. 需要达到什么样的效果?

  • 如何准确的定位网络上的一台(多台)主机
  • 找到了主机之后怎么进行数据传输?

二、 网络通信的两个要素

1. 通信双方地址

①IP

②端口号

2. 规则:网络通信协议

常见的协议:http、tcp、udp、ftp。。。

三、IP地址

1. IP地址概述

唯一定位一台网络上计算机

127.0.0.1:本地localhost

2. IP地址分类

  • ipv4 / ipv6

        ipv4:127.0.0.1 四个字节,0-255,总共约42亿个

        ipv6: fe80::7c35:c70b:19ee:ba00%21   128位,8个无符号整数

  • 公网 / 私网

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

        ABCD类地址

3. 域名

域名的产生就是为了解决IP问题 

四、端口

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

  • 不同的进程有不同的端口号,用来区分软件
  • 规定端口0-65535
  • UDP和TCP的端口均为0-65535
  • 端口分类:公有端口 0-1023(尽量不要使用)---- HTTP:80,https:443 ,ftp:21,Telent:23;常见的程序注册端口:1024-49151  分配给用户或者程序 ---- tomcat:8080,mysql:3306,Oracle:1521;动态端口:49152-65535 
  • 常见命令:netstat -ano(查看所有的端口);netstat -ano|findstr " "(查看指定端口);tasklist|findstr " " (查看指定端口的进程)

五、通信协议

协议:约定

网络通信协议:速率、传输码率等等、

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

重要协议对比

TCP:用户传输协议

  • 连接、稳定
  • 三次握手、四次挥手
  • 客户端、服务端
  • 传输完成、释放连接,效率低

UDP:用户数据报协议

  • 不连接、不稳定
  • 客户端、服务端,但是没有明确的界限
  • 无论有没有准备好都可以发送,不论对方有没有准备好

六、TCP实现聊天 

客户端

package study01;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.charset.StandardCharsets;

//客户端
public class TcpClient {
    public static void main(String[] args) {
        Socket socket =null;
        OutputStream outputStream =null;
        try {
            // 1. 连接地址
            InetAddress serverIP = InetAddress.getByName("127.0.0.1");
            // 2. 创建端口号
            int port=9999;
            // 3. 创建一个socket连接
            socket = new Socket(serverIP,port);
            // 4. 发送消息
            outputStream = socket.getOutputStream();
            outputStream.write("你好".getBytes(StandardCharsets.UTF_8));

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(socket!=null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(outputStream!=null){
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

服务端

package study01;

import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

//服务端
public class TcpService {
    public static void main(String[] args)  {
        ServerSocket serverSocket =null;
        Socket accept = null;
        InputStream is = null;
        ByteArrayOutputStream baos=null;
        //1. 需要创建一个地址给客户端进行连接,使用套接字,然后客户端可以通过9999连接服务端
        try {
            serverSocket = new ServerSocket(9999);
            //2. 等待客户端的连接
            accept = serverSocket.accept();//此时这里的socket就是客户端的socket
            //3. 读取客户端的信息
             is = accept.getInputStream();
            /*
            * 使用管道流
            * */
            baos=new ByteArrayOutputStream();
            byte[] buffer=new byte[1024];
            int len;
            if((len=is.read(buffer))!=-1){
                baos.write(buffer,0,len);
            }
            System.out.println(buffer.toString());

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭资源
            if(serverSocket!=null){
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(accept!=null){
                try {
                    accept.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(is!=null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(baos!=null){
                try {
                    baos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

七、TCP文件上传实现

客户端

服务端

八、Tomcat

服务端

  • 自定义 S
  • tomcat作为服务端 S:Java后台开发

客户端

  • 自定义 C
  • 浏览器作为客户端 B

关于C/S与B/S的区别? 

 九、UDP

1. UDP消息发送

发送端

 【补充:最后需要关闭流】

单纯只有客户端的话是不能连接成功的!会出现错误,所以其实是还是要有一个服务端接收消息,但是客户端并不用像TCP里面一样等待连接建立成功才可以! 

接收端

 2. UDP聊天实现

发送端

接收端

3. UDP实现多线程在线咨询

发送端线程

 接收端线程

 学生端

老师端

十、URL下载网络资源

URL:统一资源定位符

 

 前提是tomcat是开启的

 这样就可以了,同样我们可以使用这个方式去网上爬取资源,比如收费歌曲等等!!!

=========================================================================

好了,最近找到工作后就有些懈怠了,现在需要重新抓起来了!!!加油哇,各位!

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

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

相关文章

Python破解WIFI密码完整源代码,实测可成功破解

目录 # 修正记录:2022-12-01 1,先安装Python环境(这个不用多说了吧) 2,安装PyWifi 3,自己手工整理高频弱口令,不建议程序生成的字典,生成的字典成功率实在太低。 4,自己生成字典的算法: 5…

九联UNT413A_S905L3A__AI语音_默认打开ADB_完美线刷固件包【可救砖】

UNT413A_S905L3A__AI语音_默认打开ADB_完美线刷固件包【可救砖】_基于云南原机制作_端口5555 固件特点: 1、修改dns,三网通用; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、无开机广告,无系统更新,…

PyQt5 设置窗口背景

PyQt5 设置窗口背景使用setStyleSheet设置窗口背景图片使用setStyleSheet设置窗口背景颜色使用QPalette设置窗口背景颜色使用QPalette设置窗口背景图片使用paintEvent设置窗口背景颜色使用paintEvent设置窗口背景图片窗口背景主要包括:背景色和背景图片。设置窗口背…

跨境电商必知的交叉销售和追加销售:2022终极指南

关键词:跨境电商、交叉销售、追加销售 跨境电商可以从客户那里获得的潜在收入不会在销售点结束。 交叉销售和追加销售通过吸引客户增加支出来增加您的收入。这是一个双赢的局面,消费者获得了卓越的体验,而你赚到了更多的钱。 但是&#xff0c…

【Pandas数据处理100例】(九十七):Pandas中的eval()函数使用方法

前言 大家好,我是阿光。 本专栏整理了《Pandas数据分析处理》,内包含了各种常见的数据处理,以及Pandas内置函数的使用方法,帮助我们快速便捷的处理表格数据。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPandas版本:1.3.5N…

axure到底好不好学,有哪些技巧

Axure学习难吗?这个问题一直引起很多朋友的讨论,有的觉得难,有的觉得不难。当然,人不一样,每个人的学习方式也不一样,对学习难度的理解自然也不一样,这个问题自然没有定论。 ​在学习的时候&…

数据库------E-R图和关系模型

1、请输出下面E-R图,并转换成关系模型 有实体 A B C A属性有a1(主键),a2,a3 B属性有b1(主键),b2,b3 C属性有c1(主键),c2,c3 A和B之间有X关系,B和C之间有Y关系,A和C之间有Z关系 一个A对应多个B,一个B对应多个A 一个A对应一个C,一个C对应一个A 一个B对应一个C,一个C对应多…

Js逆向教程19-websocket介绍

Js逆向教程19-websocket介绍 作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 一、websocket介绍 Ws和Wss的区别相当于http和https的区别, 如果你想写一个聊天页面&#x…

Android Studio实现课程表应用,美观又实用(Kotlin版本)

项目目录一、应用概述二、主要技术三、开发环境四、主要功能1、设置课程表2、导入导出3、上下课提醒五、运行演示一、应用概述 本次课程表应用功能非常丰富,而且非常实用,可以添加学期的课程信息,设置展示的课程页面,设置上下课时…

李沐《动手学深度学习》第二版 pytorch笔记1 环境搭建

李沐《动手学深度学习》第二版pytorch笔记1 搭建环境 文章目录李沐《动手学深度学习》第二版pytorch笔记1 搭建环境此时尚有耐心虚拟环境搭建创建虚拟环境查看已有的虚拟环境激活虚拟环境安装深度学习框架和d2l软件包安装d2l安装pytorch连接到虚拟环境测试一下再试试...好难搞下…

[附源码]Python计算机毕业设计Django的剧本杀管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

《Mission Red in Slience》——这本“连环画”值得一看

生命离不开血液。 血液对人的意义是不言而喻的,当失血到总量的30%时,人就会有生命危险。这也就意味着献血有时是看似渺小,实际拯救生命的壮举。同时适度的献血对献血人也有助的。 但很多人对献血缺乏认识,认为其可能具有危险性&…

[附源码]Python计算机毕业设计SSM乐跑(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

3.每天进步一点点-Python爬虫需要了解HTTP 请求报文

14天学习训练营导师课程: 杨鑫《Python 自学编程基础》 杨鑫《 Python 网络爬虫基础》 杨鑫《 Scrapy 爬虫框架实战和项目管理》 文章目录1.HTTP 请求报文1.1 请求行1.2 请求头1.3 空行1.4 请求正文1.HTTP 请求报文 ​ HTTP(Hyper Text Transfer Protoc…

基于51单片机锂电池电压电量检测(原理图+PCB+程序)

资料编号:198 下面是该资料仿真演示视频: 198-基于51单片机锂电池电压电量检测(原理图PCB程序全套资料)功能介绍: 采用51系列自带AD的单片机stc12c5a60s2型号单片机(也是51单片机,外观引脚大小…

20uec++多人游戏【小球与玩家互动】

为小球添加生命值组件和伤害处理函数 //生命值组件UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category "Components")class USHealthComponent * HealthComp;//伤害处理函数UFUNCTION()void HandleTakeAnyDamage(USHealthComponent * OwnerHealthComp, float…

【蓝桥杯十四届第二期模拟赛】第四题——递归求解(python)(耗时仅不到1s出答案)(lru_cache)

前言 这次的第二期蓝桥杯模拟赛为登录官网考试,并没有使用我们那个机房的破电脑,你都让我使用我自己的电脑了,那我不得皮一下【doge】 第四题是填空题,虽然我报名的是c语言赛道,但是还是默默打开了我的pycharm&#…

Bandizip去除广告,注册图标,状态栏文本

Bandizip7.0版本之后,免费版就加入了广告。 安装完成后,Bandizip界面如下,很遗憾,我的没有出现广告,没法展示。 目标:去除界面左上角的注册图标,以及下方底部的状态栏“固实压缩”字样那里&am…

安全多方学习开源框架调研

原创 复旦DSG研究组 开放隐私计算 开放隐私计算 开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神,专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播,愿成为中国 “隐私计算最后一公里的服务区”…

ROS + vscode环境搭建

问题描述 使用ROS vscode进行开发. 解决方案 1. 安装ROS和vscode. 2. 打开vscode, 安装ROS插件. 3. 创建工作空间, 并进行一次catkin_make. mkdir -p catkin_ws/src cd catkin_ws/ catkin_make 4. 用vscode打开工作空间. cd catkin_ws/ code . vscode的ROS插件会自动配…