java的网络编程

网络编程

网络编程:java语言支持网络间的数据传输,将底层的细节封装起来了,给程序员提供了一套标准类库,方便java开发出可以进行网络通信的软件

核心问题:如何找到网络世界中的目标主机,和目标软件:找ip地址

如何安全可靠的进行数据传输

基本知识:

网络模型:
OSI参考模型:理想化的标准模型,有七层
实际使用的TCP/IP模型:
  • 应用层:各种协议规则,软件部分

  • 运输层:协议检测

  • 网络层:找ip

  • 物理链路层:硬件设备(网卡…)

通信要素:ip,端口,协议
IP:在网络世界中,表示计算机的地址
  • 局域网地址:连接路由器,由路由器自动分配ip

  • 广域网地址:家里的宽带,与外界连接

  • 本机地址:本地回环地址

端口:是计算机中运行中的程序的编号

0~1024是留给系统程序的

1024~65535是为开发的程序使用,是我们为程序定义端口号时使用的

端口不能重复,不能与已有的端口冲突

如何安全传输——通信协议:

对传输的内容,速率,出错之后的处理办法等进行的控制与制约

传输层有两个主要协议:

  • 传输控制协议TCP(Transmission Control Protocol)

    使用TCP前必须先要检测网络是否畅通,服务器是否能连接到网络

    即三次握手:第一次客户端给服务器发确保服务器能收到,第二次服务器收到给客户端发,此时客户端知道服务器能收到,然后第三次客户端再给服务器发,此时服务器也知道了自己的消息能被客户端收到

    断开流程:

    四次挥手:第一次客户端告诉服务器要断开了,第二次服务器给客户端反馈,第三次服务器把没有发完的数据给客户端,第四次客户端再通知服务器最终断开

  • 用户数据报协议UDP(User Datagram Protocol)

    将数据封装成一个一个数据报

    每个数据报的大小限制在64K内

    数据报中包含数据,源(自己电脑ip)目标(接收端ip 端口)

    发送前不需要建立连接,只管发送不管成功与否

    不够安全,但是效率高

    例如根据坐标发射导弹

    服务器与客户端:

    Socket(InetAddress address,int port)throws IOException
    //根据InetAddress对象所表示的IP地址以及端口号port发起连接。
    Socket(String host,int port)
    //域名是host。端口号为port)发起TCP连接,若成功,则创建Socket对象,否则抛出异常。
    Socket accept() throws IOException
    //等待客户端的连接请求,返回与该客户端进行通信用的Socket对象
    

    客户端:

    //创建客户端try {//host是域名,port是端口Socket socket=newSocket("192.168.124.185",7777);//在客户端向服务器发送一段话OutputStream o=socket.getOutputStream();String s="哈哈哈";o.write(s.getBytes());} catch (IOException e) {e.printStackTrace();System.out.println("连接服务器失败");}
    

    服务器:

    try {//创建并启动服务器ServerSocket so=new ServerSocket(7777);System.out.println("服务器启动成功");//监听有没有客户端连接到服务器,监听时会阻塞程序Socket socket=so.accept();System.out.println("有客户端连接到了服务器");//接收客户端发送的数据InputStream in= socket.getInputStream();byte[] bytes=new byte[100];int size=in.read(bytes);String s=new String(bytes,0,size);System.out.println(s);} catch (IOException e) {e.printStackTrace();System.out.println("服务器启动失败");}
    

用Data在客户端和服务器之间输入输出数据:

客户端:

//创建客户端try {Socket socket=new Socket("192.168.124.185",7777);//host是域名,port是端口//在客户端向服务器发送一段话OutputStream outputStream= socket.getOutputStream();DataOutputStream dataOutputStream=new DataOutputStream(outputStream);//数据处理流,直接可以输出字符串Scanner scanner=new Scanner(System.in);System.out.println("客户端输入:");String s=scanner.next();dataOutputStream.writeUTF(s);//接收服务器发的消息InputStream inputStream= socket.getInputStream();DataInputStream dataInputStream=new DataInputStream(inputStream);String s1=dataInputStream.readUTF();System.out.println("服务器说:"+s1);} catch (IOException e) {e.printStackTrace();System.out.println("连接服务器失败");}
/*
客户端输入:
xswl
服务器说:byd
*/

服务器:

try {//创建并启动服务器ServerSocket so=new ServerSocket(7777);System.out.println("服务器启动成功");Socket socket=so.accept();//监听有没有客户端连接到服务器,监听时会阻塞程序System.out.println("有客户端连接到了服务器");//接收客户端发送的数据InputStream inputStream= socket.getInputStream();DataInputStream dataInputStream=new DataInputStream(inputStream);String s=dataInputStream.readUTF();System.out.println("客户端说:"+s);//服务器回复消息OutputStream outputStream = socket.getOutputStream();DataOutputStream dataOutputStream=new DataOutputStream(outputStream);Scanner scanner=new Scanner(System.in);System.out.println("服务器输入:");String s1=scanner.next();dataOutputStream.writeUTF(s1);} catch (IOException e) {e.printStackTrace();System.out.println("服务器启动失败");}
/*
服务器启动成功
有客户端连接到了服务器
客户端说:xswl
服务器输入:
byd
*/

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

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

相关文章

ts json的中boolean布尔值或者int数字都是字符串,转成对象对应类型

没啥好写的再水一篇 json中都是字符串,转换一下就好,简单来说就是转换一次不行,再转换换一次,整体转换不够,细分的再转换一次 这是vue中 ts写法 ,我这里是拿对象做对比,不好字符和对象做对比,…

【Chrome】使用k8s、docker部署无头浏览器Headless,Java调用示例

什么是无头浏览器? 无头浏览器是一种没有图形用户界面的浏览器。无头浏览器不通过其图形用户界面(GUI)控制浏览器的操作,而是使用命令行。 为什么要用Chrome无头? Chrome Headless用于抓取(谷歌)、测试(开发者)和黑客(黑客)。搜索引擎&…

倾斜摄影三维模型根节点合并技术方法探讨

倾斜摄影三维模型根节点合并技术方法探讨 倾斜摄影技术是一种通过无人机或其他航空器采集大量高分辨率照片,并使用特殊软件将这些照片拼接成三维模型的方法。在这个过程中,摄影机以倾斜角度拍摄照片,从而捕捉到目标物体的多个视角&#xff0c…

LTE系统TDD无线帧结构特点

LTE系统TDD无线帧结构的特点主要表现在以下几个方面: 无线帧结构时间描述的最小单位是采样周期Ts。在LTE中,每个子载波为2048阶IFFT采样,△f15kHz,因此采样周期Ts1/(204815000)0.033us。 TDD的帧结构包括两个5ms的半帧&#xff0…

特殊类设计

文章目录 特殊类设计1. 请设计一个类,不能被拷贝2. 请设计一个类,只能在堆上创建对象3. 请设计一个类,只能在栈上创建对象4. 请设计一个类,不能被继承5. 单例模式5.1 设计模式5.2 单例模式(1) 饿汉模式(2) 懒汉模式 特殊类设计 1…

python如何创建自己的对冲交易算法

在这篇文章中,我解释了如何创建一个人工智能来每天为我进行自动交易。 随着机器学习的现代进步和在线数据的轻松访问,参与量化交易变得前所未有的容易。为了让事情变得更好,AWS 等云工具可以轻松地将交易想法转化为真正的、功能齐全的交易机器…

UDP网络通信反复发收

package UDP2;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner;/* * 完成UDP 通信快速入门 实现发1收1*/ public class Client {public static void main(String[] args) throws Exception{// …

k8s的coreDNS添加自定义hosts

1.ack的hosts不会继承宿主机的hosts,而工作中有一个域名默认是走内网解析,内网被限制访问了,只能在coreDNS中加一个hosts解析域名 2.编辑configmap (coredns) kubectl edit configmap -n kube-system coredns 增加hosts节点 Corefile: |.:53…

VMware Workstation安装ESXi和vCenter(8.0)

一、环境准备 虚拟机:VMware Workstation 17 Pro ESXi:ESXi-8.0U2-22380479-standard vCenter:VMware-VCSA-all-8.0.2-22385739.iso 主要是内存设置,因为vCenter需要14Gb内存,所以这个至少16Gb。 硬盘需要2块&…

S4.2.4.3 Electrical Idle Sequence(EIOS)

一 本章节主讲知识点 1.1 EIOS的具体码型 1.2 EIOS的识别规则 1.3 EIEOS的具体码型 二 本章节原文翻译 当某种状态下,发送器想要进入电器空闲状态的时候,发送器必须发送EIOSQ,也既是:电器Electrical Idle Odered Set Sequenc…

Flink部署模式及核心概念

一.部署模式 1.1会话模式(Session Mode) 需要先启动一个 Flink 集群,保持一个会话,所有提交的作业都会运行在此集群上,且启动时所需的资源以确定,无法更改,所以所有已提交的作业都会竞争集群中…

SpringBoot+Vue实现AOP系统日志功能

AOP扫盲:Spring AOP (面向切面编程)原理与代理模式—实例演示 logs表: CREATE TABLE logs (id int(11) NOT NULL AUTO_INCREMENT,operation varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 操作名称,type varchar(255) COLL…

pnpm ERR_PNPM_ADDING_TO_ROOT

ERR_PNPM_ADDING_TO_ROOT  Running this command will add the dependency to the workspace root, which might not be what you want - if you really meant it, make it explicit by running this command again with the -w flag (or --workspace-root). If you don’t wa…

【剑指Offer】36.二叉搜索树与双向链表

题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示 数据范围:输入二叉树的节点数 0≤n≤1000,二叉树中每个节点的值 0≤val≤1000 要求:O(1)(即在原树上操作),时间…

【网络】对于我前面UDP博客的补充

UDP 前言正式开始UDP报文UDP报文如何将UDP报文和报头进行分离和封装UDP如何将有效载荷交付给上层如何提取出完整报文报头是啥报头中的检验和 UDP的特点IO接口乱序问题UDP是全双工的注意事项基于UDP的应用层协议 再次谈论端口五元组端口号范围划分netstatxargs 前言 本篇比较偏…

thinkphp5.1 关联查询

关联查询使用with查询 $users User::with([profile > function($query) {$query->field(name,email); }])->select(); foreach ($users as $user) {echo $user->profile->name; } 如果查询数据时,没有数据,则不返回整条信息&#xff0c…

【Mybatis源码】XMLConfigBuilder构建器 - 加载XML与创建Configuration对象的过程

XMLConfigBuilder是Mybatis中定义的进行构建Configuration对象的类,此类用于读取XML配置文件创建并初始化Configuration对象;本篇我们主要介绍加载XML文件与创建Configuration对象的过程。 一、Configuration对象的创建过程 下面是从Configuration类中取到的代码片段: pu…

技术文档工具『Writerside』抢鲜体验

前言 2023 年 10 月 16 日,JetBrains 宣布以早期访问状态推出 Writerside,基于 IntelliJ 平台的 JetBrains IDE,开发人员可使用它编写、构建、测试和发布技术文档,可以作为 JetBrains IDE 中的插件使用,也可以作为独立…

高防CDN的发展趋势

随着互联网的迅速发展,网站和在线服务的安全性变得至关重要。网络攻击如DDoS攻击和恶意流量正在增加,因此高防CDN(高防御内容分发网络)成为网络安全的重要组成部分。本文将探讨高防CDN未来的发展趋势,并比较其与传统CD…

laravel队列

laravel redis队列 1、创建job队列任务 php artisan make:job StoreUser执行上述命令后&#xff0c;会生成app/Jobs/StoreUser.php文件&#xff0c;编辑文件内容如下&#xff1a; <?phpnamespace App\Jobs;use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queu…