网络编程、UDP、TCP

计算机网络

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

目的

传播交流信息、数据交换、通信

如何做到

1.如何准确定位网络上的一台主机 192.xxx.xx.xx:端口,定位到这个计算机上的某个资源
2.找到主机,如何传输数据
javaweb:网页编程 b/s
网络编程:tcp/ip c/s

网络通信的要素

如何实现网络的通信

1.ip、端口号
2.协议 tcp/ip协议
3.万物皆对象
在这里插入图片描述

IP

ip地址:InetAdress
唯一定位一台网络上的计算机
127.0.0.1:本机Locallost

IP地址分类

ipv4/ipv6
ipv4 127.0.0.1 4个字节 0~255 42亿 30亿在北美,4亿在亚洲,2011年用尽
ipv6:128 8个无符号整数
公网(互联网)/私网(局域网)
ABCD类地址
192.168.xx.xx 专门给组织内部使用的
域名:记忆ip问题

package com.xgglr;import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;public class IPDemo {public static void main(String[] args) {try {InetAddress[] inetAddresses = InetAddress.getAllByName("127.0.0.1");System.out.println(Arrays.toString(inetAddresses));InetAddress[] localHosts = InetAddress.getAllByName("localhost");System.out.println(Arrays.toString(localHosts));InetAddress localHost = InetAddress.getLocalHost();System.out.println(localHost);InetAddress[] baiduName = InetAddress.getAllByName("www.baidu.com");System.out.println(Arrays.toString(baiduName));for (InetAddress address : baiduName) {String canonicalHostName = address.getCanonicalHostName();//规范名称String hostName = address.getHostName();//域名String hostAddress = address.getHostAddress();//IPSystem.out.println(canonicalHostName);System.out.println(hostName);System.out.println(hostAddress);System.out.println("============");}} catch (UnknownHostException e) {e.printStackTrace();}}
}

端口

表示计算机上的一个程序的进程,不同的进程端口号不同,区分如软件
被规定0~65535
tcp/udp 6553582 tcp:80 udp:80 单个协议下,端口号不能冲突
端口分类:共有端口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 “5900” 查看指定端口
tasklist|findstr “8696” 查看指定端口的进程

通信协议

网络通信协议:速率,传输码率,代码结构,传输控制
分层思想
tcp/ip协议:一组协议
tcp:用户传输协议,udp:用户数据报协议
出名的协议:tcp,ip:网络互联协议

tcp和udp对比

tcp:打电话
连接 稳定
三次握手 四次挥手
客户端 服务端
传输完程 释放连接 效率低
udp:发短信
不连接 不稳定
客户端、服务端 没有明确的界限
不能有没有准备好 都可以发送

TCP

客户端:连接服务器Socket,发送消息

package com.xgglr.tcpDemo;import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;//客户端
public class tcpClintDemo {public static void main(String[] args) {try {InetAddress byName = InetAddress.getByName("localhost");int port = 8888;Socket socket = new Socket(byName,port);OutputStream outputStream = socket.getOutputStream();outputStream.write("您好!!!,这里时客户端".getBytes());outputStream.close();socket.close();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

服务端:建立服务的接口ServerSocket,等待用户的连接accept,接受用户的消息

package com.xgglr.tcpDemo;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Arrays;//服务端
public class tcpServerDemo {public static void main(String[] args) {ServerSocket serverSocket = null;Socket socket = null;InputStream inputStream = null;ByteArrayOutputStream byteArrayOutputStream = null;try {serverSocket = new ServerSocket(8888);while (true){socket = serverSocket.accept();inputStream = socket.getInputStream();//管道流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) {e.printStackTrace();}finally {if (byteArrayOutputStream != null){try {byteArrayOutputStream.close();} catch (IOException e) {e.printStackTrace();}}if (inputStream != null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket != null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}if (serverSocket != null){try {serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
}

文件上传

package com.xgglr.tcpDemo;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
//服务端
public class TcpFileDownLoaderServerDemo {public static void main(String[] args) {try {while (true){ServerSocket socket = new ServerSocket(9999);Socket accept = socket.accept();InputStream is = accept.getInputStream();FileOutputStream fos = new FileOutputStream(new File("D:\\software\\JavaCode\\javaSE\\JavaSE01\\src\\com\\xgglr\\tcpDemo\\tcp.jpg"));byte[] buffer = new byte[1024];int len;while ((len = is.read(buffer)) != -1){fos.write(buffer,0,len);}//确认接收到了,可以断开accept.getOutputStream().write("已经接收,可以关闭!!!".getBytes());fos.close();is.close();accept.close();socket.close();}} catch (IOException e) {e.printStackTrace();}}
}
package com.xgglr.tcpDemo;import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
//客户端
public class TcpFileDownLoaderClintDemo {public static void main(String[] args) {try {//创建连接InetAddress byName = InetAddress.getByName("localhost");int port = 9999;Socket socket = new Socket(byName,port);//创建输出流OutputStream os = socket.getOutputStream();//读取文件FileInputStream fileInputStream = new FileInputStream(new File("2.jpg"));//写出文件byte[] buffer = new byte[1024];int len;while ((len = fileInputStream.read(buffer)) != -1){os.write(buffer,0,len);}//通知服务器发送完毕socket.shutdownOutput();//确认是否接收InputStream is = socket.getInputStream();//管道流ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] bytes = new byte[1024];int lens;while ((lens = is.read(bytes)) != -1){baos.write(bytes,0,lens);}System.out.println(baos.toString());fileInputStream.close();os.close();socket.close();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

UDP

不用连接,需要知道地址

package com.xgglr.udp;import java.io.IOException;
import java.net.*;
//UDP客户端
public class UdpClint {public static void main(String[] args) {//建立连接Sockettry {DatagramSocket socket = new DatagramSocket();//建包String msg = "你好!!! Server";InetAddress localhost = InetAddress.getByName("localhost");int port = 9090;/*** byte buf[], 数据* int offset, 数据的起始长度* int length, 结束长度* netAddress address, 接受ip* int port 端口号* */DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);//发送包socket.send(packet);socket.close();} catch (SocketException e) {e.printStackTrace();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}
package com.xgglr.udp;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.util.Arrays;//UDP服务端
public class UdpServer {public static void main(String[] args) {//开放端口try {DatagramSocket socket = new DatagramSocket(9090);//接受数据byte[] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);socket.receive(packet);// 阻塞接收System.out.println(packet.getAddress().getHostName());System.out.println(packet.getPort());System.out.println(packet.getLength());// System.out.println(Arrays.toString(packet.getData()));socket.close();} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

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

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

相关文章

TensorRT及CUDA自学笔记003 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理

TensorRT及CUDA自学笔记003 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理 各位大佬,这是我的自学笔记,如有错误请指正,也欢迎在评论区学习交流,谢谢! CUDA编程模型 我们使用CUDA_C语言进行CUDA编程&am…

【Vue3】‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

问题 今天拿到别人项目的时候,我平时比较习惯用pnpm,我就使用pnpm i先下载依赖包,下载完成后,启动项目,就开始报以下错误! 但是当我执行pnpm i的时候,vite不应该就已经被我下载下来了吗 研究了…

【Java程序设计】【C00307】基于Springboot的基Hadoop的物品租赁管理系统(有论文)

基于Springboot的基Hadoop的物品租赁管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的基于 Hadoop的物品租赁系统的设计与实现,本系统有管理员、用户二种角色权限; 前台首页&#…

day11-项目集成SpringSecurity-今日指数

项目集成SpringSecurity 学习目标 理解自定义认证和授权过滤器流程;理解项目集成SprignSecurity流程; 第一章 自定义认证授权过滤器 1、SpringSecurity内置认证流程 通过研究SpringSecurity内置基于form表单认证的UsernamePasswordAuthenticationFi…

【工程院院士加盟】第四届计算机通信与人工智能国际会议

CCAI 2024 | Xian, Chinahttp://ccai.net/ - IEEE出版,EI核心和Scopus检索 - 工程院院士,IEEE Fellow等学术大咖主题演讲 - 会议时间-地点:2024年5月24-26日,中国西安 会议简介 Brief Introduction 作为人工智能的重要传播技术…

Linux环境下基本指令

今天我们一起来认识一下Linux环境下一些基本的指令,这些指令是我们学习Linux的基础,只有掌握了这些指令,我们才能在Linux环境下进一步学习知识,话不多说,我们开始(以下演示操作是在云服务器的环境下&#x…

基于SSM的车位租赁系统(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的车位租赁系统(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring Spri…

【数据分析之Numpy基础004】数学运算大揭秘:轻松玩转ndarray的强大实力

ndarray的数学运算是一项非常重要的操作,包括不同对象之间的四则运算,三角函数变换、求和、求平均等操作 1、四则运算 如果参与运算的两个对象都是ndarray,并且形状相同,那么就可以进行对位之间的四则( - * / &#x…

前后端分离vue.js+nodejs学生考勤请假系统 _fbo36

此系统设计主要采用的是nodejs语言来进行开发,采用vue框架技术,框架分为三层,分别是控制层Controller,业务处理层Service,持久层dao,能够采用多层次管理开发,对于各个模块设计制作有一定的安全性…

UI设计中,2D、2.5D、3D、4D该如何辨别?教会你

hello,我是大千UI工场,从事UI设计8年之久,在日常工作中经常听到一些概念,现在将这些概念图文并茂的呈现给您,欢迎点赞评论,如有设计需求,可以私信我们。 在UI设计中,2D、2.5D、3D和4…

【Pytorch深度学习开发实践学习】B站刘二大人课程笔记整理lecture09 Softmax多分类

代码: import torch from torchvision import datasets, transforms from torch.utils.data import DataLoader import torch.nn as nn import torch.nn.functional as Fbatch_size 64 transform transforms.Compose([transforms.ToTensor(), transforms.Normali…

python:读 Freeplane.mm文件,使用 xml.etree 生成测试案例.csv文件

Freeplane 是一款基于 Java 的开源软件,继承 Freemind 的思维导图工具软件,它扩展了知识管理功能,在 Freemind 上增加了一些额外的功能,比如数学公式、节点属性面板等。 强大的节点功能,不仅仅节点的种类很多&#xf…

不用加减乘除做加法

1.题目: 写一个函数,求两个整数之和,要求在函数体内不得使用、-、*、/四则运算符号。 数据范围:两个数都满足 −10≤�≤1000−10≤n≤1000 进阶:空间复杂度 �(1)O(1),时间复杂度 &am…

web安全学习笔记【13】——信息打点(3)

信息打点-JS架构&框架识别&泄漏提取&API接口枚举&FUZZ爬虫&插件项目[1] #知识点: 1、业务资产-应用类型分类 2、Web单域名获取-接口查询 3、Web子域名获取-解析枚举 4、Web架构资产-平台指纹识别 ------------------------------------ 1、开源…

2.5G/5G/10G高速率网络变压器(网络隔离变压器)产品介绍(1)

Hqst华轩盛(石门盈盛)电子导读:高速率/2.5G 的带POE插件(DIP)款千兆双口网络变压器2G54801DP特点 一 ﹑2.5G高速率网络变压器(网络隔离变压器):2G54801DP外观与尺寸 2G54801DP这颗产品尺寸为:长…

C++ 学习(1)---- 左值 右值和右值引用

这里写目录标题 左值右值左值引用和右值引用右值引用和移动构造函数std::move 移动语义返回值优化移动操作要保证安全 万能引用std::forward 完美转发传入左值传入右值 左值 左值是指可以使用 & 符号获取到内存地址的表达式,一般出现在赋值语句的左边&#xff…

【Python笔记-设计模式】装饰器模式

一、说明 装饰器模式是一种结构型设计模式,旨在动态的给一个对象添加额外的职责。 (一) 解决问题 不改变原有对象结构的情况下,动态地给对象添加新的功能或职责,实现透明地对对象进行功能的扩展。 (二) 使用场景 如果用继承来扩展对象行…

数据结构-二分搜索树(Binary Search Tree)

一,简单了解二分搜索树 树结构: 问题:为什么要创造这种数据结构 1,树结构本身是一种天然的组织结构,就好像我们的文件夹一样,一层一层的. 2,树结构可以更高效的处理问题 二,二分搜索树的基础 1、二叉树 2,二叉树的重要特性 满二叉树 总结: 1. 叶子结点出现在二叉树的最…

HDL FPGA 学习 - Quartus II 工程搭建,ModelSim 仿真,时序分析,IP 核使用,Nios II 软核使用,更多技巧和规范总结

目录 工程搭建、仿真与时钟约束 一点技巧 ModelSim 仿真 Timing Analyzer 时钟信号约束 SignalTap II 使用 In-System Memory Content Editor 使用 记录 QII 的 IP 核使用 记录 Qsys/Nios II 相关 记录 Qsys 的 IP 核使用 封装 Avalon IP 更多小技巧教程文章 更多好…

设计模式篇---观察者模式

文章目录 概念结构实例总结 概念 观察者模式:定义对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其他相关依赖对象都得到通知并被自动更新。 观察者模式是使用频率较高的一个模式,它建立了对象与对象之间的依赖…