php tcp utp链接,网络编程与TCP/UTP协议

2024-01-17 14:50

本文主要是介绍php tcp utp链接,网络编程与TCP/UTP协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、网络编程

1. 网络编程的三要素

2. 网络分层

3. IP位置

4. 端口 port

5. 资源的传输协议

6. Socket 编程

二、TCP编程

1. 特点

2. 主体

3. 服务器

4. 客户端

5. 示例

6. UDP编程与TCP编程的比较

(1)UDP

(2)TCP

一、网络编程

1. 网络编程的三要素

IP 地址:唯一标识网络上的每一台计算机,两台计算机之间的通信必备要素。

端口号:计算机中应用的标号(代表一个应用程序),计算机上可能运行着很多程序,那具体是和哪一个程序通信呢?

通信协议:规定通信双发的数据规则。只有相同网络协议的计算机才能进行信息的沟通与交流。这就好比人与人之间交流所使用的各种语言一样,只有使用相同语言才能正常、顺利地进行交流。

2. 网络分层

(1)通信协议的分层

3d32d1e22ae1f40200221769984fafe9.png

(2)封装

从上往下,加入相关层的协议控制信息。

(3)拆封

获取数据,从下往上,去除相关层的协议的控制信息。

3. IP位置

(1)基本概念

IP 是 Internet Protocol 的外语缩写, 网络之间互连的协议也就是为计算机网络相互连接进行通信而设计的协议,IP是唯一的,同一局域网内不可重复。

(2)常用IP

0.0.0.0:本机

127.0.0.1:本机回环地址,用于本机测试

255.255.255.255:当前子网,一般用于向当前子网广播信息

(3)IP的工具类

3d32d1e22ae1f40200221769984fafe9.png3d32d1e22ae1f40200221769984fafe9.png

IP 它是一种低级协议,UDP 和 TCP 协议都是在它的基础上构建的。

4. 端口 port

(1)概念

1)端口是虚拟的概念,通过端口,可以在一个主机上运行多个网络应用程序。

2)端口:区分数据流向的软件 0-65535 不要使用 1024 以下的端口 ,每一个协议拥有自己的端口,在同一个协议下端口不能重复 FTP:21, HTTP:80,mysql:3306,oracle:1521

(2)端口的工具类

3d32d1e22ae1f40200221769984fafe9.png3d32d1e22ae1f40200221769984fafe9.png

5. 资源的传输协议

(1)TCP

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 层是位于 IP 层之上,应用层之下的中间层。例如:打电话 面向连接、安全、可靠,效率低。

(2)UDP

UDP(UserDatagramProtocol ) UDP 协议全称是用户数据报协议 ,在网络中它与 TCP协议一样用于处理数据包,是一种无连接的协议。在 OSI 模型中,在第四层——传输层,处于 IP 协议的上一层。缺点是当报文发送之后,是无法得知其是否安全完整到达的。

6. Socket 编程

(1)InetAddress

封装计算机的 ip 地址和 DNS( Domain Name System,域名系统) ,没有端口。

1)方法:

getHostAddress()  返回 ip 地址

getByName()  返回域名|本机为计算机名

2)例如

public static void main(String[] args) throws UnknownHostException {

InetAddress add = InetAddress.getByName("www.taobao.com");

System.out.println("IP为: " + add.getHostAddress());

InetSocketAddress add2 = new InetSocketAddress("www.taobao.com", 8080);

System.out.println(add2);

}

(2)InetSocketAddress

包含主机和端口,用于 socket 通信的。

1)获取对象

InetSocketAddress(String hostname, int port)

InetSocketAddress(InetAddress addr, int port)

2)方法

getAddress()   返回 InetAddress 对象

getPort()   返回端口

getHostName()   返回域名

IP 地址+端口号组成了所谓的 Socket,Socket 是网络上运行的程序之间双向通信链路的终结点,是 TCP 和 UDP 的基础。

3)示范

public static void main(String[] args) throws UnknownHostException {

InetSocketAddress add2 = new InetSocketAddress("www.taobao.com", 8080);

System.out.println(add2);

}

(3) UDP编程

1)概念

UDP 是 User Datagram Protocol 的简称,是一种无连接的协议,每个数据报都是一个独立的信息,大小限制在 64k,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保

证的。

DatagramPacket 类:表示数据报包

DatagramSocket 类:进行端到端通信的类,此类表示用来发送和接收数据报包的套接字。

2)服务器端实现步骤(接收)

① 创建 DatagramSocket,指定端口号

② 创建 DatagramPacket

③ 接受客户端发送的数据信息

④ 读取数据

3)客户端实现步骤(发送)

① 定义发送信息

② 创建 DatagramPacket,包含将要发送的信息

③ 创建 DatagramSocket

④ 发送数据

对于同一个 socket,如果关闭了输出流,则与该输出流关联的 socket 也会被关闭,所以一般不用关闭流,直接关闭 socket 即可。

4)代码示范

需求:示范两台电脑用户间的相互交流

/**

* 实现两台电脑用户之间的交流

* 持续接收和回复

*/

public class Task05 {

public static void main(String[] args) throws Exception {

while (true) {

server();

client();

}

}

/**

* 客户端实现步骤(发送)

* 1.定义发送信息

* 2.创建 DatagramPacket,包含将要发送的信息

* 3.创建 DatagramSocket

* 4.发送数据

*/

public static void client() throws IOException {

// 准备数据

Scanner sc = new Scanner(System.in);

System.out.println("请输入您要发送的信息");

byte[] strByte = sc.nextLine().getBytes();

InetAddress addr = InetAddress.getByName("192.168.2.122");

// 创建 DatagramPacket,包含将要发送的信息

DatagramPacket packet = new DatagramPacket(strByte, strByte.length, addr, 11111);

// 创建一个可以发送数据报包的工具 DatagramSocket

DatagramSocket client = new DatagramSocket();

// 发送数据

client.send(packet);

client.close();

}

/**

* 服务器端实现步骤(接收)

* 1.创建 DatagramSocket,指定端口号

* 2.创建 DatagramPacket

* 3.接受客户端发送的数据信息

* 4.读取数据

*/

public static void server() throws IOException {

System.out.println("server");

// 创建一个DatagramSocket 指定端口

DatagramSocket server = new DatagramSocket(11111);

// 创建一个DatagramPacket 数据报包

byte[] buf = new byte[1024];

DatagramPacket packet = new DatagramPacket(buf, 1024);

server.receive(packet);

// 实际接收到的数据的长度

int len = packet.getLength();

// 数据的处理(buf, len)

String str = new String(buf, 0, len);

System.out.println(str);

server.close();

}

}

二、TCP编程

TCP 是 Tranfer Control Protocol 的 简称,是一种面向连接的保证可靠传输的协议。

1. 特点

发送方和接收方的成对的两个socket 之间必须建立连接,即请求-响应”模式;

基于 tcp 协议,建立稳定连接的点对点的通信;

实时、快速、安全性高、占用系统资源多、效率低。

2. 主体

客户端:在网络通讯中,第一次主动发起通讯的程序被称作客户端(Client)程序。

服务器:第一次通讯中等待连接的程序被称作服务器端(Server)程序。

3. 服务器

创建服务器,指定端口;

等待客户端连接;

分析接收数据。

4. 客户端

连接服务器: 创建客户端 +指定服务器地址 +端口;

发送数据。

5. 示例

利用TPC编程模式简单实现服务端与客户端之间的无障碍交流对话。(需要用到多线程)。

实现效果:

19a19bc8a9814ea96b3618ab3fc80c3c.png   19a19bc8a9814ea96b3618ab3fc80c3c.png

**

* 服务端:

* 1.等待客户链接

* 2.创建两个线程,发送数据和接收数据

*

*/

public class TCPCharServerTest03 {

public static void main(String[] args) throws Exception {

ServerSocket server = new ServerSocket(15415);

Socket client = server.accept();

System.out.println("Server: ");

// 消息发送

new SendThread(client).start();

// 消息接收

new AcceptThread(client).start();

}

}

/**

* 消息发送的线程

*/

class SendThread extends Thread {

// 接收端的socket信息

private Socket socket;

// 输出流(目的地为对端)

private OutputStream os;

// 填写信息的工具

private Scanner sc = new Scanner(System.in);

// 发送数据的数组

byte[] msg;

public SendThread(Socket socket) throws Exception {

this.socket = socket;

this.os = socket.getOutputStream();

}

//线程方法体

@Override

public void run() {

while (true) {

msg = sc.nextLine().getBytes();

try {

os.write(msg, 0, msg.length);

os.flush();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

/**

* 消息接收的线程

*/

class AcceptThread extends Thread {

// 发送端的socket信息

private Socket socket;

// 发送方的输入流(源头为发送方)

private InputStream is;

// 接收数据准备的空间

private byte[] msg = new byte[1024];

// 谁给我socket我就接收谁的信息

public AcceptThread(Socket socket) throws Exception {

this.socket = socket;

is = socket.getInputStream();

}

//线程方法体

@Override

public void run() {

while (true) {

// 接收数据到准备的空间中

try {

int len = is.read(msg, 0, msg.length);

System.out.println(new String(msg, 0, len));

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

/**

* 客户端:

* 1、主动连接服务端

* 2、创建两个线程,发送数据和接收数据

*

*/

public class TCPCharClientTest03 {

public static void main(String[] args) throws Exception {

InetAddress addr = InetAddress.getByName("127.0.0.1");

Socket serverInfo = new Socket(addr, 15415);

System.out.println("Client: ");

// 消息接收

new AcceptThread(serverInfo).start();

// 消息发送

new SendThread(serverInfo).start();

}

}

6. UDP编程与TCP编程的比较

(1)UDP

每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接;

UDP 传输数据时是 有大小限制的,每个被传输的数据报必须限定在 64KB  之内;

UDP 是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。

(2)TCP

面向连接的协议,在 socket 之间进行数据传输之前必然要建立连接,所以在 TCP中需要连接时间;

TCP 传输数据大小限制,一旦连接建立起来,双方的 socket 就可以按统一的格式传输大的数据;

TCP 是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。

这篇关于php tcp utp链接,网络编程与TCP/UTP协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/616387

相关文章

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子