网络编程、UDP、TCP

news/发布时间2024/5/16 0:59:16

计算机网络

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

目的

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

如何做到

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.bcls.cn/ntdO/4305.shtml

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

相关文章

【Ubuntu】解决Ubuntu 22.04开机显示器颜色(高对比度/反色)异常的问题

使用Ubuntu 22.04时强制关机了一下(make -j16把电脑搞崩了),开机后系统显示的颜色异常,类似高对比度或反色,如下图。看着很难受,字体也没办法辨认。还好之前遇到过类似的问题,应该是一个配置文件…

【C语言】linux内核ipoib模块 - ipoib_ib_post_receive

一、中文注释 用于以太网接口(InfiniBand)上的IP over IB(IPoIB)设备的Linux内核函数,负责将接收缓冲区(一个包)提交到网络设备的队列中等待数据到达。下面是中文注释版本的函数代码&#xff1…

Linux之权限管理

目录 一. chmod 二. ACL 2.1 什么是ACL权限 2.2 操作步骤 2.2.1 添加测试目录、用户、组,并将用户添加到组 2.2.2 修改目录的所有者和所属组 2.2.3 设定权限 2.2.4 为临时用户分配权限 r-x 2.2.5 验证acl权限 2.2.6 控制组的acl权限 一. chmod Linux chmod…

计算机网络面经-从浏览器地址栏输入 url 到显示主页的过程?

大概的过程比较简单,但是有很多点可以细挖:DNS解析、TCP三次握手、HTTP报文格式、TCP四次挥手等等。 DNS 解析:将域名解析成对应的 IP 地址。TCP连接:与服务器通过三次握手,建立 TCP 连接向服务器发送 HTTP 请求服务器…

pikachu靶场-File Inclusion

介绍: File Inclusion(文件包含漏洞)概述 文件包含,是一个功能。在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。 比如 在PHP中,提供了&…

【无刷电机学习】各种电机优势比较

目录 0 参考出处 1 有刷与无刷比较 2 交流与直流比较 3 内转子与外转子比较 4 Delta型与Y型定子绕向比较 5 低压BLDC的一些优点 0 参考出处 【仅作自学记录,不出于任何商业目的。如有侵权,请联系删除,谢谢!】 维基百科…

STP基本计算过程——选举网段的指定端口

点赞关注,持续更新STP专题 选举网段的指定端口 STP为每个网段选出一个指定端口(Designated Port),指定端口为每个网段转发发往根交换机方向的数据,并且转发由根交换机方向发往该网段的数据。指定端口所在的交换机称为…

qtday2作业

思维导图 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",…

SparkSQL学习01

目录 1.SparkSQL特点1.1易整合1.2统一的数据访问1.3兼容Hive1.4标准的数据连接 2 SparkSQL编程模型DataFrameDataSet2.1 SQL2.2 DataFrame是什么2.3 DataSet是什么2.4 RDD,DataSet,DataFrame 3 SparkSQL核心编程3.1 编程入口3.2 SparkSQL基本编程3.2.1编…

有方机器人 STM32智能小车 项目学习笔记1

今天开始学习有方机器人--智能小车项目,正点原子部分的学习先放一放,还是小车更有吸引力哈哈。 新建工程及工程模板搭建 新建工程须知 目前常用的 STM32 的开发方式主要有基于寄存器编程、基于标准库函数编程、基于 HAL 库编程这三种。 寄存器版本--…

第一个 Angular 项目 - 添加服务

第一个 Angular 项目 - 添加服务 这里主要用到的内容就是 [Angular 基础] - service 服务 提到的 前置项目在 第一个 Angular 项目 - 动态页面 这里查看 想要实现的功能是简化 shopping-list 和 recipe 之间的跨组件交流 回顾一下项目的结构: ❯ tree src/app/…

[HTML]Web前端开发技术29(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要! 目录 前言 上一节的课后练习

专业130+总分410+上海交通大学819信号系统与信号处理考研上交电子信息通信生医电科,真题,大纲,参考书。

今年考研顺利结束,我也完成了目前人生最大的逆袭,跨了两个层级跨入c9,专业课819信号系统与信息处理135,数一130总分410,考上上海交大,回想这一年经历了很多,也成长了很多。从周围朋友&#xff0…

CogFixtureTool(坐标系、校正与定位)

坐标系 任何VisionPro图像都支持一组坐标空间,为表达特定特征的位置提供数字框架。最有用的空间是根空间和用户空间,根空间将点与原始获取图像中的像素相关联,用户空间用于获得校准和固定空间中的特征位置和测量值。 根空间 图像的根空间…

springcloud:2.OpenFeign 详细讲解

OpenFeign 是一个基于 Netflix 的 Feign 库进行扩展的工具,它简化了开发人员在微服务架构中进行服务间通信的流程,使得编写和维护 RESTful API 客户端变得更加简单和高效。作为一种声明式的 HTTP 客户端,OpenFeign 提供了直观的注解驱动方式,使得开发人员可以轻松定义和调用…

力扣日记2.22-【回溯算法篇】47. 全排列 II

力扣日记:【回溯算法篇】47. 全排列 II 日期:2023.2.22 参考:代码随想录、力扣 47. 全排列 II 题目描述 难度:中等 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输…

【Android安全】Windows 环境下载 Android 源码

准备环境 安装 git 安装 Python 硬盘剩余容量最好大于 100G 打开 Git Bash,用 git 克隆源代码仓库 git clone https://android.googlesource.com/platform/manifest.git //没有梯子使用清华源 git clone https://aosp.tuna.tsinghua.edu.cn/platform/manifest.git…

AutoTimes:通过大语言模型的自回归时间序列预测器

论文标题: AutoTimes: Autoregressive Time Series Forecasters via Large Language Models 作者:Yong Liu, Guo Qin, Xiangdong Huang, Jianmin Wang, Mingsheng Long 链接:https://arxiv.org/abs/2402.02370 机构:清华大学 …

【NTN 卫星通信】基于NTN和TN的Inter-PLMN海事应用场景

1 场景概述 NTN和TN联合组网的场景,可以有多种应用方式,以下用例描述了同时使用多个卫星PLMN和一个地面5G PLMN的海事场景。 MNO-G是一家成熟的卫星PLMN运营商,运营着几颗GEO卫星。MNO-L是一个相对较新的卫星PLMN运营商,操作LEO卫…

挑战30天学完Python:Day16 日期时间

📘 Day 16 🎉 本系列为Python基础学习,原稿来源于 30-Days-Of-Python 英文项目,大奇主要是对其本地化翻译、逐条验证和补充,想通过30天完成正儿八经的系统化实践。此系列适合零基础同学,或仅了解Python一点…
推荐文章