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 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

poj 2112 网络流+二分

题意: k台挤奶机,c头牛,每台挤奶机可以挤m头牛。 现在给出每只牛到挤奶机的距离矩阵,求最小化牛的最大路程。 解析: 最大值最小化,最小值最大化,用二分来做。 先求出两点之间的最短距离。 然后二分匹配牛到挤奶机的最大路程,匹配中的判断是在这个最大路程下,是否牛的数量达到c只。 如何求牛的数量呢,用网络流来做。 从源点到牛引一条容量为1的边,然后挤奶机到汇点引一条容量为m的边

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow