TCP客户端及服务器端开发实践

一、TCP客户端及服务器端开发实践

1、TCP网络应用程序开发分类

① TCP客户端应用程序开发

② TCP服务器端应用程序开发

客户端程序是指运行在用户设备上的程序,服务端程序是指运行在服务器设备上的程序,专门为客户端提供数据服务。那如何记忆呢?

主动发起建立连接请求的是客户端程序,等待接受连接请求的是服务端程序。

2、TCP客户端程序开发流程及应用实践(五步走)

开发流程介绍

 socket类的介绍

① 导入socket模块
import socket
​
② 创建客户端socket对象使用socket类
socket.socket(AddressFamily, Type)

客户端socket类的参数和方法说明:

参数名说明
AddressFamilyIP地址类型, 分为IPv4和IPv6
Type传输协议类型

开发客户端需要使用的函数:

 

TCP客户端程序开发实践

import socketif __name__ == '__main__':# 1、创建客户端套接字对象tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2、和服务器端套接字建立连接(参数必须是一个元祖)tcp_client_socket.connect(("192.168.31.181", 8080))# 3、发送数据tcp_client_socket.send('hell, itheima'.encode(encoding='utf-8'))# 4、接收数据recv_data = tcp_client_socket.recv(1024).decode('utf-8')print(recv_data)# 5、关闭客户端套接字tcp_client_socket.close()

3、TCP服务器端开发流程及应用实践(七步走)

服务器端

开发流程介绍

 

 socket类的介绍

① 导入socket模块
import socket
​
② 创建客户端socket对象使用socket类
socket.socket(AddressFamily, Type)

客户端socket类的参数和方法说明:

参数名说明
AddressFamilyIP地址类型, 分为TPv4和IPv6
Type传输协议类型

开发客户端需要使用的函数:

① 导入socket模块
import socket
​
② 创建服务器端socket对象使用socket类
socket.socket(AddressFamily, Type)

客户端socket类的参数和方法说明:

参数名说明
AddressFamilyIP地址类型, 分为TPv4和IPv6
Type传输协议类型

开发服务器端需要使用的函数:

方法名说明
bind绑定IP地址和端口号
listen设置监听
accept等待接受客户端的连接请求
send发送数据
recv接收数据

 

 

TCP服务器端程序开发实践

import socketif __name__ == '__main__':# 1、创建服务器端套接字对象tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2、绑定IP地址与端口号tcp_server_socket.bind(("", 8888))# 3、开启监听tcp_server_socket.listen(128)# 4、等待接收客户端连接请求conn_socket, ip_port = tcp_server_socket.accept()print('客户端IP+端口:', 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()

4、TCP服务器端开发面向对象版本

# 导入模块
import socket# 创建一个WebServer服务器端类
class WebServer(object):# 定义__init__()魔术方法,用于对象初始化def __init__(self):# 创建套接字对象self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定IP与端口号self.tcp_server_socket.bind(("", 8090))# 设置监听self.tcp_server_socket.listen(128)# 定义一个handle_client_request()def handle_client_request(self, new_socket, ip_port):# 接收客户端消息recv_data = new_socket.recv(1024)recv_data = recv_data.decode('gbk')print(f'{ip_port}客户端发送过来的消息:{recv_data}')# 返回(发送)消息给客户端content = '信息已收到,over,over!'.encode('gbk')new_socket.send(content)# 处理完成后,关闭新套接字对象# new_socket.close()# 定义一个start方法,用于启动WebServer,接收客户端连接def start(self):while True:# 等待客户端连接new_socket, ip_port = self.tcp_server_socket.accept()# 定义一个方法,用于接收和发送消息self.handle_client_request(new_socket, ip_port)# 创建程序执行入口,实例化WebServer类生成对象
if __name__ == '__main__':# 实例化对象ws = WebServer()# 调用自身方法,用于启动服务ws.start()

5、扩展:TCP服务器端开发之多客户端

# 导入模块
import socket# 1、创建套接字对象
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2、绑定IP与端口
tcp_server_socket.bind(("", 8090))
# 3、设置监听
tcp_server_socket.listen(128)
# 4、等待客户端连接
while True:# 使用try...except捕获连接异常try:new_socket, ip_port = tcp_server_socket.accept()while True:try:# 5、接收客户端发送过来的消息recv_data = new_socket.recv(1024)recv_data = recv_data.decode('gbk')print(f'{ip_port}:{recv_data}')content = input('服务器端消息:').encode('gbk')new_socket.send(content)except ConnectionResetError:print(f'{ip_port}客户端连接已经断开')breakexcept:print('出错,退出服务器监听')break# 关闭套接字对象
tcp_server_socket.close()

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

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

相关文章

软考--软件设计师(软件工程总结1)

目录 1.定义 2.软件生存周期 3.软件过程(即软件开发中遵循的一系列可预测的步骤) ​编辑4.软件开发模型 5.需求分析(软件需求分析,系统需求分析或需求分析工程) 6. 需求工程 7.系统设计 8.系统测试 1.定义 软件…

题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel g…

【开发环境】Mac 安装 Visual Studio Code ( VSCode 简介 | 下载 VSCode | 安装 VSCode | 安装中文语言包 )

文章目录 一、Visual Studio Code 简介二、MAC 安装 Visual Studio Code1、下载 Visual Studio Code2、安装 Visual Studio Code3、安装中文语言包4、编辑 html 并运行 一、Visual Studio Code 简介 Visual Studio Code 简称 VSCode , 是 微软 开发的一款 轻量级 / 跨平台 的代…

SQL Server的详细使用教程

安装SQL Server 下载SQL Server 安装程序运行安装程序,选择"基本"安装类型在"实例配置"页面,将实例命名为"SQLServerTest"在"服务器配置"页面,选择"NT服务\系统"作为启动账户完成其他设置,然后安装SQL Server 连接SQL Serve…

腾讯云服务器4核8g配置好不好?用它干啥使?

腾讯云4核8G服务器多少钱?腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月,活动页面 txybk.com/go/txy 活动链接打开如下图所示: 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器,详细配置为:轻量4核…

【Pt】马灯贴图绘制过程 05-铁丝与渲染出图

目录 效果 步骤 一、基本材质 二、浮尘 三、渲染 效果 步骤 一、基本材质 CtrlAlt鼠标右键选中指定的纹理集 在智能材质中将“Iron Forged Old”加入图层 将智能材质“Iron Forged Old”文件夹打开,将图层“Base”和“Edge”的基本颜色改暗一点 二、浮尘 新…

746.Leetcode 使用最小花费爬楼梯

746.Leetcode 使用最小花费爬楼梯 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯…

BUUCTF-MD5

BUUCTF-MD5 1 注意:得到的 flag 请包上 flag{} 提交 27120bd8-e273-4528-97a9-28dcebe236de.zip flag{admin1} e00cf25ad42683b3df678c61f42c6bdahttps://www.cmd5.com/

idea常用配置——注释快捷键

1、单行注释:使用 Ctrl / 可以添加或删除当前行的注释。如果你想要给某一行添加注释,只需要将光标放在那一行,然后按下 Ctrl / 即可。如果你想要删除那一行的注释,同样只需要将光标放在那一行,然后再次按下 Ctrl /。…

【WPF应用33】WPF基本控件-TabControl的详解与示例

在Windows Presentation Foundation(WPF)中,TabControl控件是一个强大的界面元素,它允许用户在多个标签页之间切换,每个标签页都可以显示不同的内容。这种控件在组织信息、提供选项卡式界面等方面非常有用。在本篇博客…

探索STM32串口通讯:打开硬件通道的魔法之门

前言 在嵌入式系统中,串口通讯一直扮演着至关重要的角色。STM32微控制器系列内置了���个串口(USART)模块,能够支持多种串口通讯协议,如UART、SPI和I2C等。本文将深入探讨STM32串口通…

pycharm和Spyder多行注释快捷键

1.选取注释内容 2.pycharm:使用Ctrl/ 3.Spyder:使用Ctrl1 效果图

3.创建型模式--创建者模式

建造者模式(Builder Pattern)是一种对象构建的设计模式,它允许你分步骤构造一个复杂对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在建造者模式中,一个 Builder 类会一步一步构造最终的…

IDEA配置本地Maven(解决依赖下载缓慢)

1.下载Maven Maven下载页 根据需要选择下载其中一个,我选了zip格式的 将下载好的apache-maven-3.9.5解压到你想要的目录下 2.配置系统环境 设置系统环境变量 MAVEN_HOME 为安装路径的bin目录 变量名:MAVEN_HOME 变量值:写你的 apache-m…

Docker 哲学 - docker swarm

Docker Swarm 模式下的集群管理和服务恢复机制 Docker Swarm 是 Docker 的集群管理和编排功能。在 Swarm 模式下,你可以将多个 Docker 主机组合成一个虚拟主机,称为 Swarm 集群。Swarm 集群由一个或多个管理节点(manager nodes)和…

故障诊断 | 一文解决,GCN图卷积神经网络模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,GCN图卷积神经网络模型的故障诊断(Matlab) 模型描述 GCN(Graph Convolutional Network)是一种基于图结构数据进行卷积操作的神经网络模型。它在处理图数据上展现了很好的性能,特别适用于节点分类、图分类和图生成等任务。 GCN模…

金蝶Apusic应用服务器 createDataSource JNDI注入漏洞(QVD-2023-48476)

0x01 产品简介 金蝶 Apusic 应用服务器(Apusic Application Server,AAS)是一款标准、安全、高效、集成并具丰富功能的企业级应用服务器软件,全面支持 JakartaEE 8/9的技术规范,提供满足该规范的 Web 容器、 EJB 容器以及 WebService 容器等,支持 Websocket 1.1、Servlet…

延时队列实现实战:如何利用 RabbitMQ 实现延时队列,以满足特定延迟处理需求

实现延时队列,可以通过RabbitMQ的死信队列(Dead-letter queue)特性,“死信队列”是当消息过期,或者队列达到最大长度时,未消费的消息会被加入到死信队列。然后,我们可以对死信队列中的消息进行消…

51入门之LED

目录 1.配置文件 2.点亮一个LED 2.1单个端口操作点亮单个LED 2.2整体操作点亮LED 3.LED闪烁 4.LED实现流水灯 4.1使用for循环和移位实现 4.1.1移位操作符 4.1.2使用移位操作和for循环实现 4.2使用移位函数实现LED流水灯 众所周知,任何一个硬件工程师…

基于机器学习的木马检测模型的设计与实现(论文)_kaic

摘 要 科技的发展带来了人们生活的改变,近年来我国网民已突破十亿人口, 而且在后疫 情时代, 经历了疫情时期的一系列线上活动, 人们对网络的依赖比以往任何时期都要高 得多。高频次的上网行为也带来了一系列安全问题&#xff…