前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python网络编程——TCP服务端多线程

Python网络编程——TCP服务端多线程

原创
作者头像
落雨
发布于 2022-02-25 12:40:40
发布于 2022-02-25 12:40:40
30.2K00
代码可运行
举报
文章被收录于专栏:落雨的专栏落雨的专栏
运行总次数:0
代码可运行

概述

TCP服务端与多个客户端同时建立套接字,需要一个线程维护一个客户端。

实现步骤

1.导入socket包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import socket

2.创建服务端套接字

socket.socket(AddressFamily, Type)

socket.AF_INET表示IPv4类型

SOCK_STREAM表示tcp

需要设置端口复用实现服务多客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tcp_server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#端口复用 服务端退出端口立即释放
tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)        

3.绑定端口号

tcp_server_socket.bind

第一个参数表示ip地址,一般不用指定 表示本机的任何一个ip

第二个参数表示端口号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tcp_server_socket.bind(('',9090))

4.设置监听

表示最大等待建立链接的个数128

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tcp_server_socket.listen(128)

5.等待客户端的连接请求

每次客户端和服务器建立连接成功都会返回一个新的套接字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while   True:
        new_client , ip_port = tcp_server_socket.accept()
        sub_thresd = threading.Thread(target=handle,args=(ip_port,new_client))
        sub_thresd.start()

6.接收数据

收发消息使用新返回的套接字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rece_data = new_client.recv(1024)
if rece_data:
       rece_data = rece_data.decode('utf-8')
       print("接收到的数据是",rece_data)

7.发送数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
send_content = "问题正在处理中"
send_data = send_content.encode('utf-8')
new_client.send(send_data)
new_client.close()

8.关闭套接字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tcp_server_socket.close()

代码实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import socket
import threading


def handle(ip_port,new_client):
        print("客户端的ip和端口号是:" , ip_port)
        while   True:
            # 5.接收数据
                #收发消息使用新返回的套接字
            rece_data = new_client.recv(1024)
            if rece_data:
                rece_data = rece_data.decode('utf-8')
                print("接收到的数据是",rece_data)
                # 6.发送数据
                send_content = "问题正在处理中"
                send_data = send_content.encode('utf-8')
                new_client.send(send_data)
                new_client.close()
            else:
                print("客户端下线了",ip_port)
                break


if __name__ == '__main__':
    # 1.创建服务端套接字
        # socket.AF_INET表示IPv4类型
        # SOCK_STREAM表示tcp
    tcp_server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
        #端口复用 服务端退出端口立即释放
        #socket.SOL_SOCKET 表示当前套接字
        #socket._RetAddress 复用选项
        #True 确定复用
    # 2.绑定端口号
        # 第一个参数表示ip地址,一般不用置顶 表示本机的任何一个ip
        #第二个参数表示端口号
    tcp_server_socket.bind(('',9090))
    # 3.设置监听
        # 128:表示最大等待建立链接的个数
    tcp_server_socket.listen(128)
    # 4.等待客户端的连接请求
        #每次客户端和服务器建立连接成功都会返回一个新的套接字
    while   True:
        new_client , ip_port = tcp_server_socket.accept()
        sub_thresd = threading.Thread(target=handle,args=(ip_port,new_client))
        sub_thresd.start()


    # 7.关闭套接字
    tcp_server_socket.close()

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python网络编程——静态Web服务器面向对象
把Web服务器抽象成一个类,方法初始化,在初始化中建立套接字对线。提供一个开启Web服务器的方法,让Web服务器处理客户端的请求。
落雨
2022/03/01
29.2K0
Python网络编程——静态Web服务器多任务版
使用多线程,让web服务器可以同时处理多个用户的访问。当客户端和服务端建立连接成功,创建子线程,使用子线程专门处理客户端的请求,防止主线程阻塞。把创建的子线程设置成为守护主线程,防止主线程无法退出。
落雨
2022/02/28
29.2K0
用python实现TCP协议传输功能(服务端代码)
与客户端代码不同(客户端代码请看我的上一篇博客),服务端需要绑定端口号,设置监听服务,多了两个特殊的步骤,需要两行新的代码实现 准备:windows作为客户端,windows上安装网络调试助手,linux作为服务端并且写好如下代码,并且查出自己服务端(linux虚拟机)上的ip地址为:
gzq大数据
2020/11/11
8540
用python实现TCP协议传输功能(服务端代码)
python六十九课——网络编程之TCP协议
TCP协议通过三次握手协议将客户端与服务器端连接,两端使用各自的Socket对象。Socket对象中包含了IO流,供数据传输。
hankleo
2020/09/16
3380
python六十九课——网络编程之TCP协议
Python网络编程——静态Web服务器实现
可以为发出请求的浏览器提供静态文档的程序。即所访问的页面是静态的,页面中的内容不会发生变化。HTTP协议(HyperText Transfer Protocol,超文本传输协议)使用于从www服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本,还确定传输文档中的哪一部分,以及那部分内容首先显示(如文本先于图形)等
落雨
2022/02/26
30.1K0
网络编程,来了!
IP地址的作用是表示网络中唯一的一台设备的,也就是说通过IP地址能够找到网络中某台设备。
用户9399690
2022/01/20
3920
网络编程,来了!
Python网络编程——TCP客户端程序开发
connect(host, port) 表示和服务端套接字建立连接, host是服务器ip地址,port是应用程序的端口号
落雨
2022/02/24
29.6K1
Python网络编程——静态Web服务器进阶版
概述 可以返回请求的指定页面,没有请求的该文件,则返回404状态信息。 实现步骤 1.导入socket、os包 import socket import os 2.创建tcp服务端套接字 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 3.绑定端口号 tcp_server_socket.bind(("", 8000)) 4.设置监听 tcp_server_socket.listen(128) 5.等待接受客户端的连接
落雨
2022/02/26
29.4K0
Python TCP 协议网络编程《二》
今天分享的内容是在上一篇文章Python TCP 协议网络编程《一》的基础上进行的一次改造,使Server和Client可以互相交流沟通,server.py与client.py文件内容是具体的实现代码。
Wu_Candy
2022/07/04
3890
Python TCP 协议网络编程《二》
Python 实战TCP的服务端 - 胖子老板就是服务端
client (肥仔白) -- "来包利群啦" --> server(胖子老板) client (肥仔白) <-- "给你啦" -- server(胖子老板)
Devops海洋的渔夫
2019/06/02
7620
网络编程socket
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
Wyc
2018/09/11
9170
网络编程socket
网络编程
阅读目录 一.楔子 二.客户端/服务端架构 三.网络基础 四.套接字(socket)初使用 五.黏包 六.验证客户端链接的合法性 七.socketserver 一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运行,你就会发现,这两个python的文件分别运行的很好。但是如果这两个程序之间想要传递一个数据,你要怎么做呢? 这个问题以你现在的知识就可以解决了,我们可以创建一个文件,把a.py想要传递的内容写到文件中,然后b.py从这个文件中读取内容就可以了。
人生不如戏
2018/04/12
1.4K0
网络编程
01_基于TCP的循环为同一个客户端下载
TCP分为客户端(client)和服务器(server),每次服务器只能为客户端提供一次的下载服务。
py3study
2020/01/17
4260
HTTP协议和静态Web服务器
超文本是超级文本的缩写,是指超越文本限制或者超链接,比如:图片、音乐、视频、超链接等等都属于超文本。
用户9399690
2022/01/20
7260
HTTP协议和静态Web服务器
【说站】python静态web服务器如何实现
以上就是python静态web服务器的实现,希望对大家有所帮助。更多Python学习指路:python基础教程
很酷的站长
2022/11/24
6160
【说站】python静态web服务器如何实现
tcp服务端socket
import socket if __name__ == '__main__': # 创建tcp服务端socket tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 立即释放端口号,重用端口 # SOL_SOCKET: 表示当前socket # SO_REUSEADDR: 是否立即释放端口选项 # True:表示立即释放端口 tcp_server_socke
汪凡
2019/02/22
6260
Python网络编程——获取终端命令行参数
概述 获取终端命令行参数,通过使用 sys.argv实现 实现步骤 1.导入sys模块 import sys 2.获取命令行参数 params = sys.argv print(params) print(params[1]) 获取到的为字符串类型,可能需要转换类型再使用 命令行启动动态绑定端口号 1.获取执行python程序的终端命令行参数 sys.argv 2.判断参数的类型,设置端口号必须是整型 if not sys.argv[1].isdigit(): print("启动命令如下: p
落雨
2022/02/28
29.6K0
☀️苏州程序大白用万字解析Python网络编程与Web编程☀️《❤️记得收藏❤️》
在现实生产环境中,一个服务端不可能只就服务于一个客户端;通常一个服务端是要能服务多个客户端,以下是多任务的实现思路:
苏州程序大白
2021/10/25
8950
☀️苏州程序大白用万字解析Python网络编程与Web编程☀️《❤️记得收藏❤️》
Python全栈开发之网络编程
早期的计算机网络,都是由厂商规定自己的通信协议,互不兼容,为了把全世界不同类型的计算机连接起来,就必须规定一套全球通用的协议,所以就出现了TCP/IP
py3study
2020/01/07
6660
python网络编程
在学习 TCP/IP 协议之前,一直对网络编程很陌生,懂得原理之后再看网络编程的代码就觉得十分熟悉,借这个机会来总结记录一下,socket 编程的一般流程如下图,我们应该要将这些流程都记熟,用的时候按照顺序写代码就行了。很多语言都提供了 socket 的库可以直接调用,这次就用 python 来写写吧。
棒棒鸡不棒
2022/09/02
5710
python网络编程
相关推荐
Python网络编程——静态Web服务器面向对象
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验