Python中的Tcp协议的应用之Tcp服务端程序开发
TCP通信协议是面向连接的可靠的网络通信协议。
网络间想要进行数据传输必须要用到socket,socket翻译过来叫做套接字,其主要作用是不同设备或同一台设备之间的进程通信工具。
Python中的Tcp协议应用如下:
我们都知道Tcp是面相连接通信协议,所以Tcp服务端需要结合网络调试助手进行接受及测试数据传输。
Python中使用Socket的流程:
1.导入socket模块
2.创建socket对象
3.设置端口复用,主要用来解决结束服务端程序后的端口占用问题。
4.绑定端口
5.设置监听
6.等待服务端连接,当客户端与服务端连接成功后会返回一个新的socket,使用新的socket来进行通信。
7.接收数据
8.发送数据
9.关闭socket套接字,注意服务端套接字不要轻易关闭,一旦关闭,表示服务端不再提供服务。
# 1. 导入模块
import socket if __name__ == '__main__':
# 2. 创建tcp服务端套接字
# 2.1 AF_INET 表示ipv4的地址类型, AF_INET6: 表示ipv6的地址类型
# 2.2 SOCK_STREAM 表示tcp协议, SOCK_DGRAM 表示udp协议
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 3. 绑定端口号
# ("服务器的ip地址", 8000), 服务器的ip地址一般不需要指定,本机的任意一个ip都可以
# 设置端口号复用,保证服务端程序退出端口号立即释放
# 1. SOL_SOCKET 表示当前套接字
# 2. SO_REUSEADDR 表示端口号复用选项
# 3. True: 表示开启端口号复用选项
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
tcp_server_socket.bind(("", 9000))
# 4. 设置监听
# 128: 表示最大等待的连接数, 这是在单任务的情况下。
tcp_server_socket.listen(128)
# 5. 等待接受客户端的连接请求
new_socket, ip_port = tcp_server_socket.accept()
print("连接建立成功:", ip_port)
# 代码执行到此,说明连接建立成功,如果没有客户端和服务端建立连接,代码会阻塞到accept方法这个地方
# 6. 接收数据, recv 会阻塞,也就是说等着接收客户端发送的数据,收到客户端的数据解阻塞
recv_data = new_socket.recv(1024)
print("数据长度为:", len(recv_data))
# 对字节数据进行解码
recv_content = recv_data.decode("utf-8")
print("接收客户端的数据为:", recv_content, ip_port) # 7. 发送数据
send_content = "您好,问题正在处理中..."
# 对字符串进行编码转成字节
send_data = send_content.encode("utf-8")
new_socket.send(send_data) # 8. 关闭连接
# 和客户端通信完毕
new_socket.close()
# 停止建立连接的服务
tcp_server_socket.close()
Python中的Tcp协议的应用之Tcp服务端程序开发的更多相关文章
- 03-案例——多任务版TCP服务端程序开发
案例——多任务版TCP服务端程序开发 1. 需求 目前我们开发的TCP服务端程序只能服务于一个客户端,如何开发一个多任务版的TCP服务端程序能够服务于多个客户端呢?完成多任务,可以使用线程 ...
- Python中的端口协议之基于UDP协议的通信传输
UDP协议: 1.python中基于udp协议的客户端与服务端通信简单过程实现 2.udp协议的一些特点(与tcp协议的比较) 3.利用socketserver模块实现udp传输协议的并 ...
- .net core 和 WPF 开发升讯威在线客服与营销系统:使用 TCP协议 实现稳定的客服端
本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程.本产品已经成熟稳定并投入商用. 在线演示环境:https://kf.shengxunwei.com 注意 ...
- Python进阶----SOCKET套接字基础, 客户端与服务端通信, 执行远端命令.
Python进阶----SOCKET套接字基础, 客户端与服务端通信, 执行远端命令. 一丶socket套接字 什么是socket套接字: 专业理解: socket是应用层与TCP/IP ...
- websocketj--随时随地在Web浏览器中操作你的服务端程序
0 - 有没有觉得Linux标准终端界面输入输出枯燥无味? 1 - 什么?vmstat命令的输出数据不直观?有没有想过能够可视化该命令的输出? 2 - 尝试过用浏览器操作Windows中的cmd吗? ...
- TCP/IP网络编程之多进程服务端(二)
信号处理 本章接上一章TCP/IP网络编程之多进程服务端(一),在上一章中,我们介绍了进程的创建和销毁,以及如何销毁僵尸进程.前面我们讲过,waitpid是非阻塞等待子进程销毁的函数,但有一个不好的缺 ...
- Java基础---Java---网络编程---TCP的传输、客户端和服务端的互访、建立一个文本转换器、编写一个聊天程序
演示TCP的传输的客户端和服务端的互访 需求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息. 客户端: 1.建立Socket服务,指定要连接方朵和端口 2.获取Socket流中的输出流,将数 ...
- TCP/IP网络编程之多线程服务端的实现(二)
线程存在的问题和临界区 上一章TCP/IP网络编程之多线程服务端的实现(一)的thread4.c中,我们发现多线程对同一变量进行加减,最后的结果居然不是我们预料之内的.其实,如果多执行几次程序,会发现 ...
- 第5章-unix网络编程 TCP/服务端程序示例
这一章主要是完成一个完整的tcp客户/服务器程序.通过一很简单的例子.弄清客户和服务器如何启动,如何终止,发生了某些错误会发生什么.这些事很重要的 客户端代码 #include "unp. ...
随机推荐
- python机器学习——感知器
最近在看机器学习相关的书籍,顺便把每天阅读的部分写出来和大家分享,共同学习探讨一起进步!作为机器学习的第一篇博客,我准备从感知器开始,之后会慢慢更新其他内容. 在实现感知器算法前,我们需要先了解一下神 ...
- 超出隐藏兼容H5
常用的字体超出隐藏不能兼容H5和ios 所以整理了两种用jquery来实现的方法,然后弊端是只能隐藏指定字数不能段落隐藏 方法一. //超出隐藏兼容iosfunction hide(text,nube ...
- 大数据之路day01_2--记事本与EditPlus编写Hello World并且运行
在上一节我们成功的安装JAVA并且将其环境配置成功,接下来我们来编写第一个java程序——Hello World 1.利用记事本编写代码,利用命令行来编译运行 (1)新建记事本,(文件名).java后 ...
- Java多线程-CountDownLatch、CyclicBarrier、Semaphore
上次简单了解了多线程中锁的类型,今天要简单了解下多线程并发控制的一些工具类了. 1. 概念说明: CountDownLatch:相当于一个待执行线程计数器,当计数减为零时表示所有待执行线程都已执行完毕 ...
- Python——标识符的命名规则
01 Python语言的特点 python的语言特点有很多,我们这里只讲一点,python是一门面向对象的语言,即一切皆对象(Linux中有一句是:一切皆文件),括号内的只是打个比方,不懂也没事,就是 ...
- python——掌握sorted函数的用法
看本篇文章的前提是掌握 00函数的基本概念.01函数参数传递方式 可参考本人博客文章 sorted函数 是一个内建函数,接收一个可迭代对象,按照指定类型.指定顺序进行排序,特点是返回一个新的列表,不改 ...
- linux搭建简易网站
1.检查环境 getenforce #查看seLinux运行状态 Enforcing #强行执行 setenforce #临时关闭selinux vim /etc/selinux/config #编辑 ...
- Docker学习-VMware Workstation 本地多台虚拟机互通,主机网络互通,解决name or service not known
NAT网络通用配置 测试连接 主机到虚拟机 虚拟机到虚拟机 ,虚拟机到外网 CentOS,提示name or service not known 设置DNS服务器 vi /etc/resolv.co ...
- flink 流式处理中如何集成mybatis框架
flink 中自身虽然实现了大量的connectors,如下图所示,也实现了jdbc的connector,可以通过jdbc 去操作数据库,但是flink-jdbc包中对数据库的操作是以ROW来操作并且 ...
- php的精度计算问题(bcadd和bcsub)
一.前言 我们在进行php开发的时候经常会遇到浮点型的问题,特别是涉及金额的部分,常常需要进行加减运算.当小数点的位数比较多的时候,往往容易犯一些很低级的错误.这里记录一下php的精度计算和封装的小d ...