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

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

概述

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



实现步骤

1.导入socket包

importsocket


2.创建服务端套接字

socket.socket(AddressFamily, Type)

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)        


3.绑定端口号

tcp_server_socket.bind

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

第二个参数表示端口号

tcp_server_socket.bind(('',9090))


4.设置监听

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

tcp_server_socket.listen(128)


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

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

whileTrue:
new_client , ip_port=tcp_server_socket.accept()
sub_thresd=threading.Thread(target=handle,args=(ip_port,new_client))
sub_thresd.start()


6.接收数据

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

rece_data=new_client.recv(1024)
ifrece_data:
rece_data=rece_data.decode('utf-8')
print("接收到的数据是",rece_data)


7.发送数据

send_content="问题正在处理中"send_data=send_content.encode('utf-8')
new_client.send(send_data)
new_client.close()


8.关闭套接字

tcp_server_socket.close()



代码实现:

importsocketimportthreadingdefhandle(ip_port,new_client):
print("客户端的ip和端口号是:" , ip_port)
whileTrue:
# 5.接收数据#收发消息使用新返回的套接字rece_data=new_client.recv(1024)
ifrece_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)
breakif__name__=='__main__':
# 1.创建服务端套接字# socket.AF_INET表示IPv4类型# SOCK_STREAM表示tcptcp_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.等待客户端的连接请求#每次客户端和服务器建立连接成功都会返回一个新的套接字whileTrue:
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()
目录
相关文章
|
3月前
|
安全 数据处理 开发者
Python中的多线程编程:从入门到精通
本文将深入探讨Python中的多线程编程,包括其基本原理、应用场景、实现方法以及常见问题和解决方案。通过本文的学习,读者将对Python多线程编程有一个全面的认识,能够在实际项目中灵活运用。
|
1月前
|
负载均衡 网络协议 算法
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
这网络层就像搭积木一样,上层协议都是基于下层协议搭出来的。不管是ping(用了ICMP协议)还是tcp本质上都是基于网络层IP协议的数据包,而到了物理层,都是二进制01串,都走网卡发出去了。 如果网络环境没发生变化,目的地又一样,那按道理说他们走的网络路径应该是一样的,什么情况下会不同呢? 我们就从路由这个话题聊起吧。
65 4
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
|
2月前
|
网络安全 Python
Python网络编程小示例:生成CIDR表示的IP地址范围
本文介绍了如何使用Python生成CIDR表示的IP地址范围,通过解析CIDR字符串,将其转换为二进制形式,应用子网掩码,最终生成该CIDR块内所有可用的IP地址列表。示例代码利用了Python的`ipaddress`模块,展示了从指定CIDR表达式中提取所有IP地址的过程。
66 6
|
2月前
|
数据采集 存储 数据处理
Python中的多线程编程及其在数据处理中的应用
本文深入探讨了Python中多线程编程的概念、原理和实现方法,并详细介绍了其在数据处理领域的应用。通过对比单线程与多线程的性能差异,展示了多线程编程在提升程序运行效率方面的显著优势。文章还提供了实际案例,帮助读者更好地理解和掌握多线程编程技术。
|
2月前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
3月前
|
Web App开发 缓存 网络协议
不为人知的网络编程(十八):UDP比TCP高效?还真不一定!
熟悉网络编程的(尤其搞实时音视频聊天技术的)同学们都有个约定俗成的主观论调,一提起UDP和TCP,马上想到的是UDP没有TCP可靠,但UDP肯定比TCP高效。说到UDP比TCP高效,理由是什么呢?事实真是这样吗?跟着本文咱们一探究竟!
95 10
|
2月前
|
Java Unix 调度
python多线程!
本文介绍了线程的基本概念、多线程技术、线程的创建与管理、线程间的通信与同步机制,以及线程池和队列模块的使用。文章详细讲解了如何使用 `_thread` 和 `threading` 模块创建和管理线程,介绍了线程锁 `Lock` 的作用和使用方法,解决了多线程环境下的数据共享问题。此外,还介绍了 `Timer` 定时器和 `ThreadPoolExecutor` 线程池的使用,最后通过一个具体的案例展示了如何使用多线程爬取电影票房数据。文章还对比了进程和线程的优缺点,并讨论了计算密集型和IO密集型任务的适用场景。
132 4
|
2月前
|
网络协议 物联网 API
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第26天】Python 是一门功能强大且易于学习的编程语言,Twisted 框架以其事件驱动和异步IO处理能力,在网络编程领域独树一帜。本文深入探讨 Twisted 的异步IO机制,并通过实战示例展示其强大功能。示例包括创建简单HTTP服务器,展示如何高效处理大量并发连接。
70 1
|
2月前
|
Kubernetes 网络协议 Python
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
50 1
|
3月前
|
Python
Python中的多线程与多进程
本文将探讨Python中多线程和多进程的基本概念、使用场景以及实现方式。通过对比分析,我们将了解何时使用多线程或多进程更为合适,并提供一些实用的代码示例来帮助读者更好地理解这两种并发编程技术。