【python】socket 入门以及多线程tcp链接

2024-09-05 13:04

本文主要是介绍【python】socket 入门以及多线程tcp链接,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Socket 入门 及 多线程tcp链接

网络基础知识三要素
Socket是套接字的意思,是网络编程的核心对象,通信两端都独有自己的Socket对象, 数据在两个Socket之间通过 字节流(TCP协议) 或者 数据报包(UDP协议)的形式进行传输.

本文主要针对tcp流程进行讲解

socket-tcp流程图

在这里插入图片描述

1.创建服务器端

  1. 创建服务器端Socket对象, 指定: 地址族, 传输方式.

  2. 绑定ip地址 和 端口号.

  3. 设置监听. 范围: 1 ~ 128, 一般设置为: 5

  4. 等待客户端申请建立连接, 如果有, 则创建1个新的socket对象负责和该客户端交互.

  5. 接收客户端的回执信息.

  6. 释放资源.

import socketif __name__ == '__main__':# AF_INET 是 ipv4 , SOCK_STREAM 是 tcp协议Server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定的ip地址和端口号Server_socket.bind(('127.0.0.1', 8888)) # 注:这里127.0.0.1是本地ip回路,可以自行设置ip地址和端口号# 监听端口号Server_socket.listen(5)# 等待链接accept_socket, client_info = Server_socket.accept()print(f'客户端 {client_info} 已连接')# 接收信息(这步就是具体要实现的功能)recv = accept_socket.recv(1024)print(recv.decode('utf-8'))# 关闭(仅关闭客户端对象.一般不关闭服务器对象)accept_socket.close()# Server_socket.close()

2. 创建客户端

  1. 创建客户端Socket对象, 指定: 地址族, 传输方式.
  2. 连接服务器端, 指定: 要连接到的服务器ip地址 和 端口号.
  3. 接收服务器端的发送的信息.
  4. 给服务端写一句话: 回执信息.
  5. 释放资源.
import socketif __name__ == '__main__':# 创建socket对象client_Socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 链接服务器client_Socket.connect(('127.0.0.1', 8888))# 发送数据client_Socket.send('https://blog.csdn.net/weixin_57336987?spm=1011.2415.3001.5343'.encode('utf-8'))# 关闭连接client_Socket.close()

先启动服务器端,在启动客户端,即可在服务器端接收到发送数据

3.多线程与长连接

这时有些小伙伴就要问了,你这个客户端和服务器端是一对一啊,如果客户端一直不关闭链接,别人就无法访问客户端,这里就要用到线程了

3.1创建多线程服务器端
import socket
import threading
import timesocks = []
PORT = 8888  # 设置端口号
HOST = "127.0.0.1"  # 设置IP地址def server_thread():global socks# AF_INET 是 ipv4 , SOCK_STREAM 是 tcp协议server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定的ip地址和端口号server_socket.bind((HOST, PORT))# 监听端口号server_socket.listen(10)print('等待链接....')# 等待链接try:while True:# 开启线程accept_socket, client_info = server_socket.accept()print(f'客户端 {client_info} 已连接')p = threading.Thread(target=server_link, args=(accept_socket, client_info))p.start()except Exception as e:print(f'Error: {str(e)}')def server_link(accept_socket, client_info):# 持续接受接收信息, 收到886结束while True:recv_data = accept_socket.recv(1024).decode('utf-8')print(f'来自{client_info}: {recv_data}')if recv_data == "886":breaktime.sleep(1)if __name__ == '__main__':# 调用函数server_thread()# server_socket.close()
3.2创建客户端测试
import socketif __name__ == '__main__':# 创建socket对象client_Socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 链接服务器client_Socket.connect(('192.168.13.133', 8888))# 发送数据while True:data = input('请输入要发送的数据:')client_Socket.send(data.encode('utf-8'))if data == '886':break# 关闭连接client_Socket.close()

这里三个不同的客户端进行测试

在这里插入图片描述

这篇关于【python】socket 入门以及多线程tcp链接的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地