【从零学习python 】77. TCP服务端编程及注意事项

简介: 【从零学习python 】77. TCP服务端编程及注意事项

TCP服务端

在程序中,如果想要完成一个TCP服务器的功能,需要按照以下流程进行操作:

  1. 创建套接字socket
  2. 绑定(IP和端口)
  3. 监听使套接字变为可被动连接
  4. 等待客户端的连接请求accept
  5. 接收/发送数据
  6. 关闭套接字

示例代码

from socket import *
# 创建socket
tcp_server_socket = socket(AF_INET, SOCK_STREAM)
# 本地信息
address = ('', 7788)
# 绑定
tcp_server_socket.bind(address)
# 使用socket创建的套接字默认是主动的,使用listen将其变为被动的,这样就可以接收其他客户端的连接了
tcp_server_socket.listen(128)
# 如果有新的客户端来连接服务器,则产生一个新的套接字专门为这个客户端服务
# client_socket用来为这个客户端提供服务,而tcp_server_socket则可以继续等待其他新客户端的连接
client_socket, client_addr = tcp_server_socket.accept()
# 接收对方发送过来的数据
recv_data = client_socket.recv(1024)  # 接收1024个字节
print('接收到的数据为:', recv_data.decode('gbk'))
# 发送一些数据到客户端
client_socket.send("thank you !".encode('gbk'))
# 关闭为这个客户端服务的套接字,只要关闭了,就不能再为这个客户端服务
# 如果还需要服务,只能重新连接
client_socket.close()

TCP注意事项

  • TCP服务器一般需要进行绑定,否则客户端无法找到该服务器。
  • TCP客户端一般不需要绑定,因为它是主动连接服务器的,只要确定了服务器的IP和端口等信息即可,而本地客户端可以随机选择。
  • TCP服务器通过listen可以将socket创建出来的主动套接字变为被动套接字,这是编写TCP服务器时必须的操作。
  • 当客户端需要连接服务器时,需要使用connect进行连接。与UDP不同,TCP必须先建立连接才能通信。
  • 当一个TCP客户端连接到服务器时,服务器端会创建一个新的套接字,用于标识该客户端,并为该客户端提供服务。
  • listen之后的套接字是被动套接字,用于接受新客户端的连接请求,而accept返回的新套接字则用于标识这个新客户端。
  • 关闭listen之后的套接字意味着被动套接字关闭了,此时新的客户端将无法连接到服务器,但之前已经连接成功的客户端依然可以正常通信。
  • 关闭accept返回的套接字意味着该客户端已经完成服务。
  • 当客户端的套接字调用close后,服务器端的recv方法将解阻塞,并返回长度为0的数据,因此服务器可以通过返回的数据长度来区分客户端是否已经下线。
相关文章
|
18天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
102 80
|
19天前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
2天前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
11天前
|
Python
Python学习的自我理解和想法(10)
这是我在千锋教育B站课程学习Python的第10天笔记,主要学习了函数的相关知识。内容包括函数的定义、组成、命名、参数分类(必须参数、关键字参数、默认参数、不定长参数)及调用注意事项。由于开学时间有限,记录较为简略,望谅解。通过学习,我理解了函数可以封装常用功能,简化代码并便于维护。若有不当之处,欢迎指正。
|
7天前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
29 14
|
17天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
53 2
|
22天前
|
Python
Python学习的自我理解和想法(7)
学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第七天,学的内容是集合。开学了,时间不多,写得不多,见谅。
|
20天前
|
存储 安全 索引
Python学习的自我理解和想法(8)
这是我在B站千锋教育学习Python的第8天,主要内容是元组。元组是一种不可变的序列数据类型,用于存储一组有序的元素。本文介绍了元组的基本操作,包括创建、访问、合并、切片、遍历等,并总结了元组的主要特点,如不可变性、有序性和可作为字典的键。由于开学时间紧张,内容较为简略,望见谅。
|
3月前
|
存储 算法 API
Python学习五:函数、参数(必选、可选、可变)、变量、lambda表达式、内置函数总结、案例
这篇文章是关于Python函数、参数、变量、lambda表达式、内置函数的详细总结,包含了基础知识点和相关作业练习。
42 0
|
7月前
|
存储 Python Windows
【Python学习篇】Python实验小练习——函数(十)
【Python学习篇】Python实验小练习——函数(十)
44 1