【从C++到Java一周速成】章节14:网络编程

章节14:网络编程

  • 【1】网络编程的概念
  • 【2】IP地址与端口的概念
  • 【3】网络通信协议
    • 引入
    • 网络通信协议的分层
  • 【3】Socket套接字
  • 【4】单向通信
  • 【5】双向通信

【1】网络编程的概念

把分布在不同地理区域的计算机与专门的外部设备用通信线路互联成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源。设备之间在网络中进行数据的传输,发送/接收数据。

【2】IP地址与端口的概念

  • IP地址:用来标志网络中的一个通信实体的地址。通信实体可以是计算机,路由器等。
  • 端口号:IP地址用来标志一台计算机,但是一台计算机上可能提供多种应用程序,使用端口来区分这些应用程序。

【3】网络通信协议

引入

计算机网络中实现通信必须有一些约定即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等指定标准。

由于结点间联系复杂,制定协议时,把复杂成分分解成一些简单的成分,再讲它们复合起来。最长用的复合方式是层次方式,即同层间可以通信、上一层可以调用下一层,而与再下一层不发生关系。

网络通信协议的分层

  • 名义上的标准:ISO/OSI参考模型(但实际上只停留在实验室,停留在理论讲解,实际上没有得到应用,并没有实际的产品出来)
ISO/OSI参考模型一共7层
应用层程序实现需求
表示层解决不同系统之间的通信问题:比如Linux给Windows发包
会话层自动发包,自动寻址功能
传输层当传输的内容过大时,对发出去的数据进行封装
网络层传输过程中选择最优路径(就是路由器,交换机那些具有寻址功能的设备所实现的功能)
数据链路层确保数据传输正确,提供检测和纠错功能
物理层定义物理设备的标准:网线的接口类型,光纤的接口类型,各种传输介质的传输速率;数据最终变成01串从物理设备中传输出去
  • 事实上的标准:TCP/IP协议栈(Internet使用的协议)
TCP/IP协议一共4/5层
应用层负责应用程序间的数据通讯。最常见的协议为DNS和HTTP
传输层负责两台主机间的数据传输。常见协议为TCP和UDP
网络层自动发包,自动寻址功能
数据链路层负责设备之间的数据帧的传送和识别
物理层(可选)负责将数据转换成信号,再将信号转换为数据

【3】Socket套接字

程序员开发的网络应用程序位于应用层,如果要使用网络,只需要与传输层交接即可,可以把传输层理解为快递员,程序员寄快递只需要把快递给快递员,至于快递怎么运输的不用管。

在应用层如何使用传输层的服务呢?Socket套接字就是应用层与传输层之间的桥梁,应用程序通过这个桥梁向远程发送或接收远程数据。
在这里插入图片描述

【4】单向通信

先创建一个服务器端

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;public class TestServer {public static void main(String[] args) throws IOException {System.out.println("服务器端启动");//套接字,IP默认为本地网络IP,端口号随便设置一个,但要保证服务器端与客户端一致ServerSocket ss = new ServerSocket(1234);//此处的异常抛出即可//等待客户端发送数据Socket s=ss.accept();//本例中服务器要接受数据则创建输入流InputStream is=s.getInputStream();DataInputStream dis=new DataInputStream(is);//接受客户端发送的数据String str=dis.readUTF();System.out.println(str);//倒序依次关闭流与网络资源dis.close();is.close();s.close();ss.close();}
}

运行,让服务器端启动,服务器会一直等待客户端发送的数据
在这里插入图片描述
再创建一个客户端

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;public class TestClient {public static void main(String[] args) throws IOException {System.out.println("客户端启动");//套接字:指定服务器的ip和端口号Socket s=new Socket("10.67.3.131",1234);//本例通过客户端发送数据,创建输出流OutputStream os=s.getOutputStream();DataOutputStream dos=new DataOutputStream(os);//发送数据dos.writeUTF("你好");//关闭流、网络资源dos.close();os.close();s.close();}
}

运行客户端,可以看到客户端发送完数据后关闭了
在这里插入图片描述
这时发现服务器端接收到了数据
在这里插入图片描述

【5】双向通信

服务器端

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class TestServer {public static void main(String[] args) throws IOException {System.out.println("服务器端启动");//套接字,IP默认为本地网络IP,端口号随便设置一个,但要保证服务器端与客户端一致ServerSocket ss = new ServerSocket(1234);//此处的异常抛出即可//等待客户端发送数据Socket s=ss.accept();//本例中服务器要接受数据则创建输入流InputStream is=s.getInputStream();DataInputStream dis=new DataInputStream(is);//接受客户端发送的数据String str=dis.readUTF();System.out.println(str);//向客户端发送数据OutputStream os=s.getOutputStream();DataOutputStream dos=new DataOutputStream(os);dos.writeUTF("你好客户端,我是服务器,我收到了你的消息");//倒序依次关闭流与网络资源dos.close();os.close();dis.close();is.close();s.close();ss.close();}
}

客户端

import java.io.*;
import java.net.Socket;public class TestClient {public static void main(String[] args) throws IOException {System.out.println("客户端启动");//套接字:指定服务器的ip和端口号Socket s=new Socket("10.67.3.131",1234);//本例通过客户端发送数据,创建输出流OutputStream os=s.getOutputStream();DataOutputStream dos=new DataOutputStream(os);//发送数据dos.writeUTF("客户端:你好");//接收服务器端发来的数据InputStream is=s.getInputStream();DataInputStream dis=new DataInputStream(is);String str=dis.readUTF();System.out.println("服务器端:"+str);//关闭流、网络资源dis.close();is.close();dos.close();os.close();s.close();}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BioMistral 7B——医疗领域的新方法,专为医疗领域设计的大规模语言模型

1. 概述 自然语言处理领域正在以惊人的速度发展,ChatGPT 和 Vicuna 等大型语言模型正在从根本上改变我们与计算机交互的方式。从简单的文本理解到复杂的问题解决,这些先进的模型展示了类似人类的推理能力。 特别是,BLOOM 和 LLaMA 等开源模…

草图大师2024怎么保存低版本呢?插件怎么写?

草图大师是一款流行的绘图和设计软件,为了向后兼容,保存低版本文件时,可以采取以下步骤: su模型库 1.另存为旧版本格式: 在保存文件时,草图大师通常会提供一个选项,让你选择要保存的文件格式和…

JSONP原理及应用实例

JSONP是什么 JSONP&#xff08;JSON with Padding&#xff09;是一种跨域数据请求技术&#xff0c;它允许网页在不受同源策略限制的情况下从其他域中请求数据。JSONP的原理是利用 <script> 标签的跨域特性&#xff0c;通过 <script> 标签&#xff0c;指向包含 JSO…

Transformer详解(3)-多头自注意力机制

attention multi-head attention pytorch代码实现 import math import torch from torch import nn import torch.nn.functional as Fclass MultiHeadAttention(nn.Module):def __init__(self, heads8, d_model128, droput0.1):super().__init__()self.d_model d_model # 12…

大模型日报|今日必读的 13 篇大模型论文

大家好&#xff0c;今日必读的大模型论文来啦&#xff01; 1.MIT新研究&#xff1a;并非所有语言模型特征都是线性的 最近的研究提出了线性表征假说&#xff1a;语言模型通过操作激活空间中概念&#xff08;“特征”&#xff09;的一维表征来执行计算。与此相反&#xff0c;来…

【EXCEL_VBA_基础知识】15 使用ADO操作外部数据

课程来源&#xff1a;王佩丰老师的《王佩丰学VBA视频教程》&#xff0c;如有侵权&#xff0c;请联系删除&#xff01; 目录 1. 使用ADO链接外部数据源 2. 常用SQL语句&#xff08;Execute(SQL语句)&#xff09; 2.1 查询数据、查询某几个字段、带条件查询、合并两表数据、插…

GPT提示词技巧,使用教程,国内版官网直达,非套壳

GPT提示词技巧&#xff0c;使用教程&#xff0c;国内版官网直达&#xff0c;非套壳 主站点&#xff1a;https://chatgpt-plus.top&#xff08;江苏福建地区打不开&#xff0c;需要魔法&#xff09; 店铺地址&#xff1a;https://buy.chatgpt-plus.top/ 选择plus账号进入&…

工地升降机AI人数识别系统

工地升降机人数识别系统采用了AI神经网络和深度学习算法&#xff0c;工地升降机AI人数识别系统通过升降机内置的摄像头实时监测轿厢内的人员数量。通过图像处理和人脸识别算法&#xff0c;系统能够精确地识别升降机内的人数。一旦系统识别到人数达到或者超过设定的阈值&#xf…

C++中的四种类型转换运算符

隐式类型转换是安全的&#xff0c;显式类型转换是有风险的&#xff0c;C语言之所以增加强制类型转换的语法&#xff0c;就是为了强调风险&#xff0c;让程序员意识到自己在做什么。但是&#xff0c;这种强调风险的方式还是比较粗放&#xff0c;粒度比较大&#xff0c;它并没有表…

虚拟化技术[1]之服务器虚拟化

文章目录 虚拟化技术简介数据中心虚拟化 服务器虚拟化服务器虚拟化层次寄居虚拟化裸机虚拟化VMM无法直接捕获特权指令解决方案 服务器虚拟化底层实现CPU虚拟化内存虚拟化I/O设备虚拟化 虚拟机迁移虚拟机动态迁移迁移内容&#xff1a;内存迁移迁移内容&#xff1a;网络资源迁移迁…

mysqldump提示Using a password on the command line interface can be insecured的解决办法

mysql数据库备份一句话执行命令 mysqldump --all-databases -h127.0.0.1 -uroot -p123456 > allbackupfile.sql 提示如下提示 [rootyfvyy5b2on3knb8q opt]# mysqldump --all-databases -h127.0.0.1 > allbackupfile.sql mysqldump: Couldnt execute SELECT COLUMN_NA…

3D模型旋转显示不全怎么办---模大狮模型网

在3D建模和渲染过程中&#xff0c;我们有时会遇到旋转模型时显示不全的问题。这种情况可能由多种原因造成&#xff0c;包括模型本身的问题、软件设置不当、硬件配置不足等。本文将为您详细介绍几种可能的解决方法&#xff0c;帮助您解决3D模型旋转显示不全的问题。 一、检查模型…

防火墙技术基础篇:基于IP地址的转发策略

防火墙技术基础篇&#xff1a;基于IP地址的转发策略的应用场景及实现 什么是基于IP地址的转发策略&#xff1f; 基于IP地址的转发策略是一种网络管理方法&#xff0c;它允许根据目标IP地址来选择数据包的转发路径。这种策略比传统的基于目的地地址的路由更灵活&#xff0c;因…

K8s-yaml文件

一.Yaml文件详解&#xff1a; Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式&#xff1a;主要用于 api 接口之间消息的传递YAML 格式&#xff1a;用于配置和管理&#xff0c;YAML 是一种简洁的非标记性语言&#xff0c;内容格式人性化&#xff0c;较易读 YAML 语…

寻找峰值 ---- 二分查找

题目链接 题目: 分析: 因为题目中要找的是任意一个峰值即可, 所以和<山脉数组的峰值索引>这道题差不多因为峰值左右都小于峰值, 所以具有"二段性", 可以使用二分查找算法如果nums[mid] < nums[mid 1], mid一定不是峰值, 所以left mid 1如果nums[mid] &…

【数据库】MySQL

文章目录 概述DDL数据库操作查询使用创建删除 表操作创建约束MySqL数据类型数值类型字符串类型日期类型 查询修改删除 DMLinsertupdatedelete DQL基本查询条件查询分组查询分组查询排序查询分页查询 多表设计一对多一对一多对多设计步骤 多表查询概述内连接外连接 子查询标量子…

【LeetCode 随笔】面试经典 150 题【中等+困难】持续更新中。。。

文章目录 12.【中等】整数转罗马数字151.【中等】反转字符串中的单词6.【中等】Z 字形变换68.【困难】文本左右对齐167.【中等】两数之和 II - 输入有序数组 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您…

基于YOLO系列算法(YOLOv5、YOLOv6、YOLOv8以及YOLOv9)和Streamlit框架的行人头盔检测系统

摘要 本文基于最新的基于深度学习的目标检测算法 (YOLOv5、YOLOv6、YOLOv8)以及YOLOv9) 对头盔数据集进行训练与验证&#xff0c;得到了最好的模型权重文件。使用Streamlit框架来搭建交互式Web应用界面&#xff0c;可以在网页端实现模型对图像、视频和实时摄像头的目标检测功能…

网络考试系统的设计与实现参考论文(论文 + 源码)

网络考试系统的设计与实现 摘 要 科技在进步&#xff0c;人们生活和工作的方式正发生着改变&#xff0c;不仅体现在人们的衣食住行&#xff0c;也体现在与时俱进的考试形式上。以前的考试需要组织者投入大量的时间和精力&#xff0c;需要对考试的试题进行筛选&#xff0c;对后期…

变量命名的艺术:从蛇形到驼峰

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、蛇形命名法的魅力 二、类名和模块名的特殊规则 三、驼峰命名法的魅力与挑战 四、保持…