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

相关文章

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

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

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为