人工智能-网络编程、TCP

news2025/1/10 2:59:09

目录

    • 1、网络编程
      • 1.1网络介绍
      • 1.2IP地址
      • 1.3 ifconfig和ping命名
      • 1.4端口和端口号
      • 1.5端口号的分类
      • 1.6 socket介绍
      • 1.7 TCP介绍
    • 2、TCP的网络应用程序开发
      • 2.1 python3编码转换
      • 2.2 TCP客户端程序开发流程
      • 2.3 TCP客户端程序开发
      • 2.4 TCP服务端程序开发流程
      • 2.5 TCP客户端程序开发
      • 2.6 TCP网络应用程序注意点
      • 2.7 案例:多任务版TCP服务端程序开发

1、网络编程

1.1网络介绍

网络:将具有独立功能的多台计算机通过通信线路和通信设备连接起来,在网络管理软件和网络通信协议下,实现资源共享和信息传递的虚拟平台
学习网络的目的:能够编写基于网络通信的软件或程序,即网络编程

1.2IP地址

IP地址是分配给网络设备上网的数字标签,能够标识网络中唯一的一台设备
IP地址的表现形式:IPV4(目前使用的IP地址),IPV6(未来使用的IP地址)

1.3 ifconfig和ping命名

在这里插入图片描述
ping baidu.com 评一下百度,看运行是否正常
查看网卡信息----ifconfig
检查网络----ping

1.4端口和端口号

ip地址只能定位到电脑设备,但不能定位到程序(是微信还是QQ)
通信流程:通过IP地址找到对应设备,通过端口号找到对应端口,通过端口把数据给到相应应用程序

端口:传输数据通道,是数据传输的必经之路
端口号:用来管理区分不同端口的一个号码

1.5端口号的分类

按照一定的规定分为:知名端口号,动态端口号
知名端口号是指众所周知的端口号,范围0到1023。(例如号码110)
动态端口号:一般程序员开发应用程序使用的端口号,范围1024到65535。(例如我们每个人的号码)

1.6 socket介绍

socket套接字,程序之间通信的一个工具,类别知道了电话号码还需要电话才能进行通信。
socket:程序间网络数据通信的工具

1.7 TCP介绍

数据不能随便发送,在发送之前要选择网络传输方式(传输协议),保证程序之间按照指定的传输规则进行数据的通信
TCP:传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议
TCP特点:1,面向连接,2,可靠的(TCP采样发送应答机制、超时重传、错误校验、流量控制和阻塞管理)
TCP通信步骤:创建连接、传输数据、关闭连接

2、TCP的网络应用程序开发

2.1 python3编码转换

网络数据的传输:以二进制的数据进行传输
encode编码–decode解码
bytes.decode(encoding=‘utf-8’)
str.encode(encoding=‘utf-8’)

2.2 TCP客户端程序开发流程

TCP网络应用程序开发分为:TCP客户端程序开发,TCP服务端程序开发
客户端:运行在用户设备上的程序。主动发起建立连接请求
服务端:运行在服务器上的程序,专门为客户端提供数据服务。等待接受连接请求

2.3 TCP客户端程序开发

开发TCP客户端程序流程:

  1. 创建客户端套接字对象
  2. 和服务器套接字建立连接
  3. 发送数据
  4. 接收数据
  5. 关闭客户端套接字

导入socket模块 —import socket
在这里插入图片描述
在这里插入图片描述

import socket
if __name__ =='__main__':
	#1. 创建客户端套接字对象
	tcp_client_socket = socket.socket(socket.AF_INET,socket.sock_STREAM)
	#2. 和服务器套接字建立连接
	tcp_client_socket.connect(('172.16.62.136',8080))
	#3. 发送数据
	tcp_client_socket.send('nihaome'.encode(encoding='utf-8'))
	#4. 接收数据 recv阻塞等待数据的到来
	recv_data = tcp_client_socket.recv(1024)
	print(recv_data.decode())
	#5. 关闭客户端套接字
	tcp_client_socket.close()

在这里插入图片描述

2.4 TCP服务端程序开发流程

  1. 创建服务端端套字对象
  2. 绑定IP地址和端口号
  3. 设置监听
  4. 等待接受客户端的连接请求
  5. 接收数据
  6. 发送数据
  7. 关闭套接字

2.5 TCP客户端程序开发

在这里插入图片描述

import socket
if __name__ =='__main__':
	#1. 创建服务端端套字对象
	tcp_server_socket = socket.socket(socket.AF_INET,socket.sock_STREAM)
	#2. 绑定IP地址和端口号
	#tcp_server_socket.bind(('172.16.62.136',8080))
	#如果bind中的参数第一个IP地址元素设置为“”,默认为本机ip地址
	tcp_server_socket.bind(("",8080))
	#3. 设置监听128:代表服务端等待排队连接的最大数量
	tcp_server_socket.listen(128)
	#4. 等待接受客户端的连接请求
	conn_socket,ip_port = tcp_server_socket.accept()
	print('客户端地址:',ip_port)
	#5. 接收数据
	recv_data = conn_socket.recv(1024)
	print('接收到的数据:',recv_data.decode())
	#6. 发送数据
	conn_socket.send('客户端你的数据接收到了'.encode())
	#7. 关闭套接字
	conn_socket.close()
	tcp_server_socket.close()
 

在这里插入图片描述

2.6 TCP网络应用程序注意点

不管是recv还是send都不是直接接收数据和发送数据给对方的,发送数据会写入到发送缓冲区,接收数据是从缓冲区来读取,发送数据和接收数据最终是由操作系统控制网卡来完成的。

2.7 案例:多任务版TCP服务端程序开发

缺陷:目前开发的tcp服务端只能服务于一个程序
修改:加一个while True

import socket
if __name__ =='__main__':
	#1. 创建服务端端套字对象
	tcp_server_socket = socket.socket(socket.AF_INET,socket.sock_STREAM)
	#设置端口复用
	tcp_server_socket.setsockopt(.socketSOL_SOCKET,socket.SO_REUSEADDR,True)
	#2. 绑定IP地址和端口号
	#tcp_server_socket.bind(('172.16.62.136',8080))
	#如果bind中的参数第一个IP地址元素设置为“”,默认为本机ip地址
	tcp_server_socket.bind(("",8080))
	#3. 设置监听128:代表服务端等待排队连接的最大数量
	tcp_server_socket.listen(128)
	while True:
		#4. 等待接受客户端的连接请求
		conn_socket,ip_port = tcp_server_socket.accept()
		print('客户端地址:',ip_port)
		#5. 接收数据
		recv_data = conn_socket.recv(1024)
		print('接收到的数据:',recv_data.decode())
		#6. 发送数据
		conn_socket.send('客户端你的数据接收到了'.encode())
		#7. 关闭套接字
		conn_socket.close()
	tcp_server_socket.close()

缺陷:目前开发的tcp服务端不能同时服务于多个程序
修改:多任务

import socket
import threading
def handle_client(conn_socket):
	#5. 接收数据
	recv_data = conn_socket.recv(1024)
	print('接收到的数据:',recv_data.decode())
	#6. 发送数据
	conn_socket.send('客户端你的数据接收到了'.encode())
	#7. 关闭套接字
	conn_socket.close()
	
if __name__ =='__main__':
	#1. 创建服务端端套字对象
	tcp_server_socket = socket.socket(socket.AF_INET,socket.sock_STREAM)
	#设置端口复用
	tcp_server_socket.setsockopt(.socketSOL_SOCKET,socket.SO_REUSEADDR,True)
	#2. 绑定IP地址和端口号
	#tcp_server_socket.bind(('172.16.62.136',8080))
	#如果bind中的参数第一个IP地址元素设置为“”,默认为本机ip地址
	tcp_server_socket.bind(("",8080))
	#3. 设置监听128:代表服务端等待排队连接的最大数量
	tcp_server_socket.listen(128)
	while True:
		#4. 等待接受客户端的连接请求
		conn_socket,ip_port = tcp_server_socket.accept()
		print('客户端地址:',ip_port)
		#使用多线程去接收多个客户端的请求
		sub_thread = threading.Thread(target=handle_client,args=(conn_socket,))
		sub_thread.start()
	tcp_server_socket.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/146469.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Android]序列化原理Parcelable

Parcelable是Android为我们提供的序列化的接口,Parcelable相对于Serializable的使用相对复杂一些,但Parcelable的效率相对Serializable也高很多,这一直是Google工程师引以为傲的,Parcelable和Serializable的效率对比Parcelable vs…

CesiumLab中对输入人工模型的格式要求 CesiumLab系列教程

人工模型数据(或者手工模型数据)是三维 GIS 行业发展的最早的需求来源,通过3dsmax,maya 等建模工具人工建模的数据。 ​ 编辑 人工模型 这张图是cesiumlab上对人工模型来源的流程,在上面我们只罗列了四个建模工具&a…

Rabbitmq消息队列详解(二)——消息模式API

官网提供的消息模式&#xff1a; 依赖&#xff1a; <!-- 加入rabbitmq --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency>hello模型 没有交换机&…

电商物流第三方云仓到底是什么?

仓库能够简单地定义为一个规划空间&#xff0c;通常是一个用于处置和贮存货物的大型商业建筑。因而&#xff0c;仓储是指在这样一个规划空间中存储和处置货物所触及的一切过程。仓库中常见的货物包括&#xff1a;;机械零配件、建筑资料、废品农产品、家具和电子产品。仓库中的一…

Git、GitHub、Gitee、GitLab

Git、GitHub、Gitee、GitLab 文章目录前言一、Git1.1 Git概述1.2 版本控制1.3 为什么需要版本控制1.4 版本控制工具1.5 Git简史1.6 Git工作机制1.7 Git和代码托管中心二、Git安装三、 Git常用命令3.1 设置用户签名3.2 初始化本地库3.3 查看本地库状态3.3.1 首次查看&#xff08…

【c++】 仿函数的概念详解与基础实现

四、仿函数 函数对象(仿函数)是一个类&#xff0c;不是一个函数。 函数对象(仿函数)重载了”() ”操作符使得它可以像函数一样调用。分类:假定某个类有一个重载的operator()&#xff0c;而且重载的operator()要求获取一个参数&#xff0c;我们就将这个类称为“一元仿函数”&…

【算法笔记】最近公共祖先(LCA)算法求解——倍增算法

0. 前言 最近公共祖先简称 LCA&#xff08;Lowest Common Ancestor&#xff09;。两个节点的最近公共祖先&#xff0c;就是这两个点的公共祖先里面&#xff0c;离根最远的那个。 这种算法应用很广泛&#xff0c;可以很容易解决树上最短路等问题。 为了方便&#xff0c;我们记…

再获认可!知道创宇入选《2022中国各地区科创之星势力图3.0版》

近日&#xff0c;由数据智能产业创新服务领域的垂直、专业深度媒体数据猿推出的《2022中国各地区科创之星势力图3.0版》正式公布。知道创宇凭借网络安全领域过硬的技术实力与创新能力入选“科创之星势力图”。二度认可知道创宇再获科创之星优秀企业本次数据猿公布的《2022中国各…

第十九章AJAX学习

文章目录什么是AJAX服务器端渲染Ajax渲染&#xff08;局部更新&#xff09;前后端分离同步与异步同步异步前端提交到数据到后端的方式JSON什么是JSONJSON数据格式JSON对象JSON格式表示简单数组对象数组使用二维数组保存对于客户端对于服务器端引入GSON的jar包使用例子Axios简介…

MySQL数据库:库和表的基本操作

SQL注意事项 1.每条sql语句都要以英文分号结尾。 2.sql语句不区分大小写。 3.定义库、表&#xff0c;或是表中的字段&#xff0c;名称不要使用关键字。 一、数据库的操作 1.显示所有的数据库 show databases; 2.创建数据库 方式一&#xff1a; create database 数据库名称…

vue+elementui导入Excel文件(基于vue-element-admin中的uploadExcel组件), 然后 go-zero进行逻辑处理功能

#前端代码 html代码 <el-button v-waves class"filter-item" type"primary" icon"add" click"downLoadExlce">模板下载</el-button> <el-upload class"upload" action :multiple"false" :show-…

2.两数相加(链表)

题目 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会…

【Linux】动静态库的制作和使用

目录 一、可执行文件的形成 二、静态库 2.1 制作静态库 2.2 使用静态库 三、动态库 3.1 动态库的制作 3.2 动态库链接 2.3 动态库的加载 一、可执行文件的形成 在C语言中&#xff0c;函数库文件分为两种类型&#xff1a; 静态库&#xff08;库程序是直接注入目标程序…

想要做成一件事,就得有方法,怎么做到呢

想要完成一件事&#xff0c;没有详细的计划和方法是做不好的。如果没有计划&#xff0c;没有方案&#xff0c;没有策略&#xff0c;没有规划&#xff0c;没有方法&#xff0c;那就是一只无头苍蝇&#xff0c;到处乱撞&#xff0c;不能达到什么目的。想做成一件事&#xff0c;就…

后端人眼中的Vue(二)

三、Vue基本语法 3.1、展示数据 3.1.1、v-text 3.1.1.1、简介 ​ 和插值表达式&#xff08;{{}}&#xff09;一样&#xff0c;用于获取vue实例中data属性声明的数据。用法是在哪个标签上获取就直接在哪个标签上定义v-text或者是v-html。相当于javascript中的innerText。直接…

笔记:Android 系统架构

Android系统架构 1.应用层&#xff08;System Apps&#xff09; 系统内置应用程序和非系统应用程序&#xff0c;源码目录中的 packages 目录对应系统应用层 2.应用架构层&#xff08;Framework&#xff09; 为开发人员提供应用程序开发所需要的API&#xff0c;向下与c/c程序…

J-Tech Talk|跨模态视频检索进阶,一起探索CLIP模型的新天地!

J-Tech Talk由 Jina AI 社区为大家带来的技术分享围绕 Python 的相关话题工程师们将深入细节地讲解具体的问题分享 Jina AI 在开发过程中所积累的经验CLIP 模型在零样本图像分类、跨模态检索中效果拔群&#xff0c;它的出现同时推动了 NLP 和 CV 的发展&#xff0c;为解决许多实…

【自学C++】C++转义字符

C转义字符 C转义字符教程 在编程中有一些字符是打不出来的&#xff0c;比如换行&#xff0c;提示音&#xff0c;下一个制表位等等&#xff0c;于是程序语言的开发者就设计了转义序列&#xff08;escape sequence&#xff09;这种东西用来表达这些字符。 所谓转义&#xff0c…

jvm学习的核心(二)---运行时数据区概述

文章目录1.方法区&#xff08; Method Area&#xff09;2.堆&#xff08;Heap&#xff09;3.本地方法栈&#xff08;Native Method Stacks&#xff09;4.程序计数器&#xff08;pc Register&#xff09;5.虚拟机栈&#xff08;Virtual Machine Stacks&#xff09;运行时数据区 …

IDEA启动项目通过https进行访问,nginx配置https访问

一、IDEA启动项目通过https进行访问 1、获取证书 证书申请网络有很多方法&#xff0c;这里腾讯云的nginx版证书举列 2、证书转换 springboot是识别p12证书的&#xff0c;所有这里需要吧pem证书进行转换。转换工具OpenSSL-Win64&#xff08;自行百度下载&#xff09;下载完…