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

news2024/11/15 21:43:02

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 socket

if __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 socket

if __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 time

socks = []
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":
            break
    time.sleep(1)


if __name__ == '__main__':
    # 调用函数
    server_thread()
    # server_socket.close()

3.2创建客户端测试
import socket

if __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()
    

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

在这里插入图片描述

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

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

相关文章

面试高频:MySQL索引

1 概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引, 并指定索引的类型,各类索引有各自的数据结构实现。(具体细节在后续的数据库原理课程讲解) 2 作用 数据库中的表…

栈栈栈专题

一、基础 Leetcode 3174. 清除数字 class Solution { public:string clearDigits(string s) {string st; // 用string模拟栈的行为for(auto& v: s){if(isdigit(v)) st.pop_back();else st v;}return st;} }; 二、进阶 三、邻项消除 四、合法括号字符串 五、…

录屏快捷键不再神秘!2024年3款高效工具推荐

这年头,数字化了,录屏变成了我们学习、工作、娱乐时候的必备技能。不管我们是想录个教学视频、直播游戏还是记下会议内容,有个给力的录屏软件能省不少事。今儿,我给你说说2024年大家特别喜欢的三款录屏工具,它们不仅功…

RK3588 环境搭建

安装系统 参考3588用户手册安装系统安装qt install_qt.sh打开工程 下载runtime rknn-toolkit2-master.zip 5.1 解压 5.2 将/home/orangepi/works/rknn-toolkit2-master/rknpu2/runtime 拷贝到/home/orangepi/env_3588/下面 头文件所在目录 5.3 orangepiorangepi5plus:~/work…

源代码一定要加密!11款超级好用的源代码加密软件排行榜

在信息爆炸的时代,源代码的安全性成为了软件开发行业不可忽视的关键议题。加密,作为守护代码安全的利剑,其重要性不言而喻。对于开发者而言,选择一款高效、可靠的源代码加密软件,不仅能够有效保护知识产权,…

智慧体育馆如何区别于传统场馆?

在科技日新月异的今天,智慧体育馆作为现代体育与信息技术深度融合的产物,正逐步颠覆着传统场馆的运营模式与体验方式。它不仅代表了体育设施向智能化、数字化转型的必然趋势,更是提升全民体育参与热情、促进体育产业升级的关键一环。 智慧体…

什么是云计算?

1.云计算的概念? 现阶段广为人们所接受的是美国国家标准与技术研究院(National Institute of Standards and Technology,NIST)给出的定义:“云计算”是一种按使用量付费的模式,这种模式提供可用的、便捷的、…

汽车电子行业知识:关于域控制器

车载域控制器(Vehicle Domain Controller, VDC)是现代汽车电子架构中的关键组件,负责整合和管理多个电子控制单元(ECU),以提高车辆的智能化和自动化水平。 1. 定义与功能 车载域控制器是一个集中式的计算…

让Windows保持低资源使用率的10个习惯,看下有没有你想要的

序言 十年前,一台低端Windows电脑是我的日常驱动力。它只有4GB的RAM,一个低端处理器,没有专用的图形卡。尽管存在这些局限性,但我过去常常明智地管理资源以避免性能问题。今天,我将分享我当时所依赖的技巧,这些技巧在今天仍然有效。 使用轻量级程序 首先,考虑用不会占…

ai聊天软件哪个好?建议看看这5个“聊天搭子”

你知道吗?现在除了饭搭子、奶茶搭子之外,现在还流行一种特别的“搭子”——聊天搭子。 不过,这种搭子有点特别,它们不会感到疲倦,也不会因忙碌而忽略你,因为它们就是ai聊天免费软件。无论是分享一天的趣事…

【系统架构设计师-2009年】综合知识-答案及详解

更多内容请见: 备考系统架构设计师-核心总结索引 文章目录 【第1题】【第2~4题】【第5题】【第6题】【第7~8题】【第9~10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第21题】【第22题】【第23题】…

HelpLook VS Baklib:一对一比较

HelpLook VS Baklib 企业帮助中心搭建软件对比产品对比 文档编辑体验文档编辑流程3 步6 步富文本编辑器✔✖文档效果所见即所得✔✖导入文档支持批量导入Word和Markdown格式文件✖导出备份支持导出为PDF、HTML和Markdown格式仅支持json格式自定义域名绑定流程域名解析1. 购…

opencv实战项目二十:检测箱盖的旋转角度以及位置

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、算法流程:二、算法实现:2.1 二值化箱盖并获取最大轮廓:2.2 凸包与多边形近似提取矩形2.3 最小外接矩形获取角度与位置 三…

动能方案 | 血糖监测仪解决方案

随着糖尿病患者数量的增加和人们健康意识的提升,血糖监测仪成为了日常健康管理的重要设备。市场对便携、智能且易于使用的血糖监测仪需求持续增长,而无线通信技术,尤其是蓝牙技术,已成为现代血糖监测仪的核心组件,提供…

【数据分享】2000-2022年我国省市县三级的逐日O3数据(免费获取\excel\shp格式)

空气质量数据是在我们日常研究中经常使用的数据!之前我们给大家分享了2000-2022年的省市县三级的逐日PM2.5数据、2013-2022年的省市县三级的逐日CO数据、2013-2022年的省市县三级的逐日SO2数据、2008-2022年我国省市县三级的逐日NO2数据和2000-2022年我国省市县三级…

监控台在特定场所的应用需要注意哪些?

监控台作为监控系统的核心操作平台,其在特定场所的应用显得尤为重要。然而,不同场所因其功能、环境及安全需求的差异,对监控台的应用提出了不同的要求与注意事项。本文将给大家从几个关键方面探讨监控台在特定场所应用时需要注意的事项。 1. …

自定义查询模板,调起查询弹框

查询模板初始化 导入一个新的查询模板 配置模板查询内容 将导入的模板 分配到对应的单据上 调起查询弹框private IBillReferQuery setConditionClient(String templateId,Container parent, String pkOperator, String funNode, String pkCorp) {TemplateInfo ti = new Temp…

图片尺寸不合适?这3款免费好用的AI绘图神器帮你免费无缝拓展!一键扩展画面之外的内容,真的泰裤啦!

大家好,我是画画的小强 在处理图片素材时,大家有没有遇到过尺寸不合适但又不能裁切的情况?是不是也想过图像要是能自己“长”出一块就好了?这种要求在以前或许很难实现,但生产式 AI 技术出现后它就不再是问题了&#…

python文件自动化(4)

接上节课内容,在开始正式移动文件到目标文件夹之前,我们需要再思考一个问题。在代码运行之前,阿文的下载文件夹里已经存在一些分类文件夹了,比如图例中“PDF文件”这个文件夹就是已经存在的。这样的话,在程序运行时&am…

【CFD教程】水中翼型空化现象模拟

一、案例背景 空化是液体中出现局部低压产生空泡的现象,比如螺旋桨、水泵等空化会造成金属腐蚀。通过本案例模拟,将定性地看到具有翼型截面的水泵叶片高速运动时,表面出现的低压空泡区域。 本案例需要的输入文件和参数信息如下表&#xff1…