首页 > 编程语言 >【python】socket 入门以及多线程tcp链接

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

时间:2024-09-04 21:25:25浏览次数:12  
标签:__ socket python server client 客户端 多线程 Socket

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

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

在这里插入图片描述

标签:__,socket,python,server,client,客户端,多线程,Socket
From: https://blog.csdn.net/weixin_57336987/article/details/141904474

相关文章

  • 网络编程--python
    网络编程1、介绍(一)、概述网络编程也叫套接字编程,Socket编程,就是用来实现网络互联的不同计算机上运行的程序间可以进行数据交互(二)、三要素IP地址:设备(电脑,手机,IPad,耳机…)在网络中的唯一标识.端口号:程序在设备上的唯一标识.协议:通信(传输)......
  • 【python因果推断库6】使用 pymc 模型的工具变量建模 (IV)1
    目录使用pymc模型的工具变量建模(IV)使用pymc模型的工具变量建模(IV)这份笔记展示了一个使用工具变量模型(InstrumentalVariable,IV)的例子。我们将会遵循Acemoglu,Johnson和Robinson(2001)的一个案例研究,该研究尝试解开强大的政治机构对于以国内生产总值(GDP)......
  • Python | 爬虫实战——亚马逊搜索页监控(附详细源码)
    背景做亚马逊店铺,如果你的品卖爆了,免不得遇到被人跟品、广告关键词竞争甚至是恶意投诉等事情。如果靠人去检查产品是否正常,存在不及时的问题。所以,基本都会想要有一个自动检测的工具。一般是自动根据关键词,设置邮编,查看对应市场下的搜索结果页是否,然后进一步判断搜索结构页......
  • How to draw a simple relation graph in Python
    forward:https://martinlwx.github.io/en/how-to-draw-a-simple-relation-graph-in-python/ IntroTheprocessofdrawingasimplerelationgraphinpythoncanbebrokendowninto2steps.Defineagraph.Drawagraph.Step1.DefineagraphInthisstep,......
  • python遍历之批量更改文件名
    遍历方式更改文件名importosimportsys#定义一个名字叫做rename的函数defrename(filePath):"""批量重命名指定路径下的'.dbf','.prj','.shp','.shx'格式的文件,重命名格式:文件_文件夹名字,并删除'.sbn','.sbx','.......
  • 【Python】数据可视化之分类图
    目录条形图箱形图散点图分簇散点图小提琴分簇小提琴条形图条形图是一种直观的图表形式,它通过不同长度的矩形条(即“条形”)来展示数值变量的中心趋势估计值,其中每个矩形的高度直接对应于该组数据的某个中心量度(如均值、中位数等)。此外,为了向观众传达关于这些中心趋势估......
  • SQLServer事务复制延迟优化之多并行(多线程)复制
    事务复制的延迟在数据库的主从复制过程中,包括MySQL的主从复制,SQLServer的事务复制等等,鉴于主节点往往是并发写入的,而从节点(SQLServer中叫做订阅节点)在重放主节点的写操作的时候,往往会产生一定时间的延迟,如何降低这种复制延迟,并行复制或者说多线程复制是其中手段之一。 SQLServ......
  • Python监控进程资源占用并发送邮件
    项目新特性上线后,有时会因为包含内存泄露的问题导致服务资源被占满,以至于线上服务崩溃。最简单的方式是对服务期CPU/内存占用进行监测和及时预警。python中pyutil包是自动化运维常用的工具库之一,可以进行方便获取服务器CPU/内存及进程等相关信息。安装方法pipinstallpsutil......
  • 【Python类型推断】
    在Python中,类型推断是指根据变量所赋的值自动确定变量的数据类型。Python是一种动态类型语言,解释器会在运行时根据赋值操作来推断变量的类型。常见的用于类型推断的方法有type()和isinstance()。例如:num=10print(type(num))#<class'int'>pi=3.14159prin......
  • 基于python+flask框架的校园二手车交易系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育事业的蓬勃发展,校园内的学生群体日益庞大,他们的消费需求也日益多样化。在校园生活中,学生们常常面临着新旧物品更替的需求,尤其......