首页 > 编程语言 >1.网络编程

1.网络编程

时间:2023-09-29 17:46:57浏览次数:32  
标签:DatagramSocket IP 编程 网络 TCP new ds dp

网络编程

概述:

计算机跟计算机之间通过网络进行数据传输;

软件架构:

常见的软件架构:
CS/BS
CS/BS的区别和优缺点:
CS: 客户端服务端模式需要开发客户端;
BS: 浏览器服务端模式不需要开发客户端;
CS: 适合定制专业化的办公类软件如: IDEA、网游;
BS: 适合移动互联网应用,可以在任何地方随时访问的系统;

网络编程三要素:

概述:
IP:	设备在网络中的地址,是唯一的标识;
端口号: 应用程序在设备中唯一的标识;
协议:	数据在网络中传输的规则;
	 常见的协议有UDP,TCP,http,https,ftp

分类:

IP:
作用:
设备在网络中的地址,是唯一的标识;
IPv4的特点:
目前的主流方案;
最多只有2^32次方个ip,目前已经用完了;
  • 现在是利用局域网IP解决IP不够的问题;
  • 127.0.0.1属于特殊IP,永远表示本机;
IPv6的特点:
为了解决IPv4不够用而出现的;
最多有2^128次方个ip;
可以为地球上的每一粒沙子都设定ip;
InetAddress:
  • 概述:
此类表示Internet协议(IP)地址;
此类不对外开放构造方法,只能使用getByName(String host)方法获得该对象;
  • 常用方法:
static InetAddress getByName(String host)			确定主机名称的IP地址,主机名称可以是机器名称,也可以是IP地址;
String getHostName()								获取此IP地址的主机名;
String getHostAddress()								返回文本显示中的IP地址字符串;
端口号:
作用:
应用程序在设备中唯一的标识;
概述:
由两个字节表示的整数,取值范围: 0~65535
其中0~1023之间的端口号用于一些知名的网络服务或者应用;
我们自己使用1024以上的端口号就可以了;
注意:
一个端口号只能被一个应用程序使用;
协议:
概述:
计算机网络中,连接和通信的规则被称为网络通信协议;
OSI参考模型: 世界互联协议标准,全球通信规范,单模型过于理想化,未能在因特网上进行广泛推广;
TCP/IP参考模型(或TCP/IP协议): 事实上的国际标准;
UDP协议:
  • 用户数据报协议(User Datagram Protocol);
  • UDP是面向无连接通信协议;
  • 特点:速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据;
UDP通信程序(发送数据):
  • 步骤:
//1.创建发送端的DatagramSocket对象;
DatagramSocket ds = new DatagramSocket();

//2.打包数据(DatagramPacket);
String str = "你好威啊!!!!";
byte[] bytes = str.getBytes();
//获取IP
InetAddress address = InetAddress.getByName("127.0.0.1");
//指定端口
int port = 10086;
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);

//3.发送数据;
ds.send(dp);
        
//4.释放资源;
ds.close();
  • 细节(DatagramSocket):
绑定端口,以后我们就是通过这个端口往外发送;
空参: 所有可用的端口中随机一个进行使用;
有参: 指定端口号进行绑定
UDP通信程序(接收数据):
  • 步骤:
//1.创建接收端的DatagramSocket;
DatagramSocket ds = new DatagramSocket(10086);

//2.接收打包好的数据;
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
ds.receive(dp);

//3.解析数据包;
byte[] data = dp.getData();
int len = dp.getLength();
InetAddress address = dp.getAddress();
int port = dp.getPort();
System.out.println("接收到数据:" + new String(data,0,len));
System.out.println("该数据是从" + address + "这台电脑" + port + "端口发出的");

//4.释放资源;
ds.close();
  • 细节:
ds.receive(dp):
	该方法是阻塞的; 程序执行到这一步的时候,会在这里死等; 等发送端发送消息;
DatagramSocket ds = new DatagramSocket(10086):
	接收端的端口,要与发送端打包数据的端口号一致;
UDP的三种通信方式:
1.单播: 上面的代码就是单播的;
2.组播:
	创建的DatagramSocket对象变为MulticastSocket对象;
	组播地址: 224.0.0.0~239.255.255.255;	其中224.0.0.0~224.0.0.255为预留的组播地址;
	接送的时候需要用MulticastSocket对象调用joinGroup方法,将当前本机,添加到224.0.0.1的这一组当中;
3.广播:
	广播地址: 255.255.255.255;
	将单播中,指定的ip改为广播地址即可;
TCP协议:
  • 传输控制协议TCP(Transmission Control Protocol);
  • TCP协议是面向连接的通信协议;
  • 特点:速度慢,没有大小限制,数据安全;
TCP通信程序(发送数据/客户端);
//TCP协议,发送数据
//1.创建Socket对象
Socket socket = new Socket("127.0.0.1", 10000);

//2.可以从连接通道中获取输出流
OutputStream os = socket.getOutputStream();
//写出数据
os.write("aaa".getBytes());

//3.释放资源
os.close();
socket.close();
TCP通信程序(接收数据/服务器);
//TCP协议,接收数据

//1.创建对象ServerSocker
ServerSocket ss = new ServerSocket(10000);

//2.监听客户端的链接
Socket socket = ss.accept();

//3.从连接通道中获取输入流读取数据
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
int b;
while((b = br.read()) != -1){
	System.out.print((char)b);
}

//4.释放资源
br.close();
socket.close();
ss.close();
TCP通信程序(三次握手和四次挥手):
三次握手协议保证连接建立;
四次挥手,利用这个协议断开连接,而且保证连接通道里面的数据已经处理完毕了;

UUID类

表示不可变通用唯一标识符(UUID)的类;
调用randomUUID()方法来获取;

标签:DatagramSocket,IP,编程,网络,TCP,new,ds,dp
From: https://www.cnblogs.com/chj020415/p/17737123.html

相关文章

  • 【题解】[CQOI2008] 传感器网络
    题意给定一张有向无环图,从中选出一棵有根树(节点编号为\(0\simn\),树根为\(n\)),使得除根节点外所有节点的出度的最大值最小。除根节点外,依次输出每个节点的父亲,并要求字典序最小。(\(1\len\le50\))*注意:由于个人习惯,这里将节点编号重编为\(1\simn+1\),根节点即为\(n+1\)......
  • Aveva Marine VBNET 编程系列-新建图纸,创建文字
    根据MarApi,创建图形文件,新建文字ImportsAveva.ApplicationFramework.PresentationImportsAveva.Marine.Drafting'marAPI.dllPublicClass绘图控制<MyAmFunctionAtt(NameOf(绘图控制),NameOf(新建图纸))>PublicSub新建图纸(wmAsWindowManager)Di......
  • Windows网络编程之事件选择模型(三)
    一、WSACreateEvent函数WSACreateEvent函数是Windows套接字API中的一部分,它用于创建套接字事件对象,以便在套接字操作上等待事件发生。这个函数通常与异步套接字操作一起使用,以允许应用程序异步地等待套接字事件的发生,而不需要阻塞线程。函数原型:WSAEVENTWSAAPIWSACreateEven......
  • Unix/Linux系统编程学习笔记第七、八章
    Unix/Linux系统编程学习笔记第七、八章知识点归纳以及最有收获的内容文件操作级别文件和目录的基本操作创建文件:使用touch命令或编程语言中的文件创建函数。-创建目录:使用mkdir命令或编程语言中的目录创建函数。复制文件或目录:使用cp命令或编程语言中的复制函数。移......
  • 使用 AI 编程助手 CodeWhisperer,开发如有神助
    前段时间体验了chatGPT,听说它可以写代码,结果发现更多的只是一个对答写小作文的百度助手,虽然也能写代码,但不是我想要的,可以在idea中可以快速生成代码块的。一个偶然的机会,从微信群里了解到,由亚马逊云科技推出的CodeWishPerer开发插件,可以在多个开发环境中使用,如:VisualStudio(VS......
  • 零代码编程:用ChatGPT批量修改文件夹名称中的大小写
    一个文件夹下面有很多个子文件夹,要把文件夹中的大写数字全部重命名为小写数字,比如将二三四,改成:234在ChatGPT中输入提示词如下:你是一个Python编程专家,要完成一个文件夹重命名的任务。具体步骤如下:本地电脑“E:\PeppaPig小猪佩奇”文件夹下有很多个文件夹;获取所有文件夹标题名......
  • 零代码编程:用ChatGPT批量将多个文件夹中的视频转为音频
    有多个文件夹中的视频,都要批量转换成音频格式。转换完成后要删除视频。虽然现在已经有很多格式转换软件可以实现这个功能,但是需要一个个文件夹的操作,还要手动去删除视频。用ChatGPT来写一个批量自动操作程序吧:输入提示词如下:你是一个Python编程专家,要完成一个批量转换格式的任务,具......
  • 编程基础与Python的开发模式
    1.3.1程序设计的概念1.逻辑设计(1)过程的起点是分析并确定需求。(2)从现实中抽象。(3)抽象过后是设计算法。2.程序设计(1)选择编程语言。(2)设计数据结构。(3)设计业务逻辑。(4)选择开发模式。1.3.2程序的生命周期(1)硬件部分。(2)操作系统。(3)汇编语言。(4)高级语言。(5)应......
  • 编程和脚本编写
    编程指南断言assert在开发期间帮助检测和诊断不正常或无效的运行时条件。且不会存在于发布代码中。其默认值必须一律为true。assert主要有三个不同族系:check、verify和ensure,底层代码在Engine/Source/Runtime/Core/Public/Misc/AssertionMacros.h中。check最接近基础assert,......
  • js 游戏编程:(平滑跟随算法+碰撞检测算法) 贪吃蛇
    相信大家都用c语言写过贪吃蛇吧!今天让我们来试试js写的贪吃蛇!<metaname="viewport"content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no"/><style>@keyframesrot{0%{transform:rota......