TCP服务端程序开发
TCP服务端程序开发
1. 开发 TCP 服务端程序开发步骤回顾
- 创建服务端端套接字对象
- 绑定端口号
- 设置监听
- 等待接受客户端的连接请求
- 接收数据
- 发送数据
- 关闭套接字
2. socket 类的介绍
导入 socket 模块
- import socket
创建服务端 socket 对象
- socket.socket(AddressFamily, Type)
参数说明:
- AddressFamily 表示IP地址类型, 分为TPv4和IPv6
- Type 表示传输协议类型
方法说明:
- bind((host, port)) 表示绑定端口号, host 是 ip 地址,port 是端口号,ip 地址一般不指定,表示本机的任何一个ip地址都可以。
- listen (backlog) 表示设置监听,backlog参数表示最大等待建立连接的个数。
- accept() 表示等待接受客户端的连接请求
- send(data) 表示发送数据,data 是二进制数据
- recv(buffersize) 表示接收数据, buffersize 是每次接收数据的长度
3. TCP 服务端程序开发示例代码
import socketif __name__ == '__main__':# 创建tcp服务端套接字tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 设置端口号复用,让程序退出端口号立即释放tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 给程序绑定端口号tcp_server_socket.bind(("", 8989))# 设置监听# 128:最大等待建立连接的个数, 提示: 目前是单任务的服务端,同一时刻只能服务与一个客户端,后续使用多任务能够让服务端同时服务与多个客户端,# 不需要让客户端进行等待建立连接# listen后的这个套接字只负责接收客户端连接请求,不能收发消息,收发消息使用返回的这个新套接字来完成tcp_server_socket.listen(128)# 等待客户端建立连接的请求, 只有客户端和服务端建立连接成功代码才会解阻塞,代码才能继续往下执行# 1. 专门和客户端通信的套接字: service_client_socket# 2. 客户端的ip地址和端口号: ip_portservice_client_socket, ip_port = tcp_server_socket.accept()# 代码执行到此说明连接建立成功print("客户端的ip地址和端口号:", ip_port)# 接收客户端发送的数据, 这次接收数据的最大字节数是1024recv_data = service_client_socket.recv(1024)# 获取数据的长度recv_data_length = len(recv_data)print("接收数据的长度为:", recv_data_length)# 对二进制数据进行解码recv_content = recv_data.decode("gbk")print("接收客户端的数据为:", recv_content)# 准备发送的数据send_data = "ok, 问题正在处理中...".encode("gbk")# 发送数据给客户端service_client_socket.send(send_data)# 关闭服务与客户端的套接字, 终止和客户端通信的服务service_client_socket.close()# 关闭服务端的套接字, 终止和客户端提供建立连接请求的服务tcp_server_socket.close()
执行结果:
客户端的ip地址和端口号: ('172.16.47.209', 52472)
接收数据的长度为: 5
接收客户端的数据为: hello
说明:
当客户端和服务端建立连接后,服务端程序退出后端口号不会立即释放,需要等待大概1-2分钟。
解决办法有两种:
- 更换服务端端口号
- 设置端口号复用(推荐大家使用),也就是说让服务端程序退出后端口号立即释放。
设置端口号复用的代码如下:
# 参数1: 表示当前套接字
# 参数2: 设置端口号复用选项
# 参数3: 设置端口号复用选项对应的值
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
网络调试助手充当客户端程序:
4. 小结
- 导入socket模块
- 创建TCP套接字‘socket’
- 参数1: ‘AF_INET’, 表示IPv4地址类型
- 参数2: ‘SOCK_STREAM’, 表示TCP传输协议类型
- 绑定端口号‘bind’
- 参数: 元组, 比如:(ip地址, 端口号)
- 设置监听‘listen’
- 参数: 最大等待建立连接的个数
- 等待接受客户端的连接请求‘accept’
- 发送数据‘send’
- 参数: 要发送的二进制数据, 注意: 字符串需要使用encode()方法进行编码
- 接收数据‘recv’
- 参数: 表示每次接收数据的大小,单位是字节,注意: 解码成字符串使用decode()方法
- 关闭套接字‘socket’表示通信完成
TCP服务端程序开发相关推荐
- 网络编程之TCP服务端程序开发
TCP服务端程序开发 学习目标 能够写出TCP服务端应用程序接收和发送消息 1. 开发 TCP 服务端程序开发步骤回顾 创建服务端端套接字对象 绑定端口号 设置监听 等待接受客户端的连接请求 接收数据 ...
- TCP客户端、服务端程序开发
套接字类似于通讯工具 # 客户端 import socketif __name__ == '__main__':# 1.创建客户端套接字对象tcp_client_socket = socket.soc ...
- OSI七层模型以及TCP/UDP客户端/服务端程序实例
OSI七层模型以及TCP/UDP客户端/服务端程序实例 一.前言 二.OSI简介 2.1 OSI概念 2.2 划分原则 2.3 OSI七层模型 2.4 模型举例 三.Linux下TCP/UDP程序开发 ...
- Go语言实现TCP服务端和客户端
Go语言实现TCP服务端和客户端 Go语言实现TCP通信 TCP协议 TCP服务端 TCP客户端 本文转载自Go语言实现TCP通信 Go语言实现TCP通信 TCP协议 TCP/IP(Transmiss ...
- php编写TCP服务端和客户端程序
From: http://blog.csdn.net/anda0109/article/details/46655301 1.修改php.ini,打开extension=php_sockets.dll ...
- java项目_好程序员Java分享从入门到服务端项目开发的过程
好程序员Java分享从入门到服务端项目开发的过程,对于打算入门或者刚刚入门学习Java的人来说,刚开始接触这门学科,往往会觉得不知所措,也会觉得很迷茫.结合前人经验,就从入门到进阶对于Java的学习而 ...
- python 安卓应用层_使用Python开发客户端和服务端程序 理解应用层协议和表示层...
不少学习计算机网的学生,对于服务器和客户机,以及应用层协议 表示层理解的不完全,在这里我使用Python编写了用于传输学生信息的程序.服务端使用TCP的8898端口侦听客户端的请求.客户端向服务端发送 ...
- 采用netty开发智能手表tcp服务端还是非常不错的
采用netty开发智能手表tcp服务端还是非常不错的,经过单服务部署测试并发能达到10w,可以用于开发开发马蹄锁,儿童智能手表,其他智能设备,物联网等等,有啥有趣好玩的物联网可以进行交流一下
- ESP32学习笔记(9)——TCP服务端
一.TCP与UDP优缺点 1.TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接. 2.TCP提供可靠的服务.也就是说,通过TCP连接传送的数据,无差错,不丢失 ...
最新文章
- xenserver 虚拟机扩容lvm磁盘分区的方法_Linux磁盘扩容
- [Android开源项目] GitHub开源项目总结 (转)
- Qt 设置textEdit插入文本的字体、大小和颜色
- DataFrame对比RDD
- webpack配置工程师(一):基本篇
- 记一篇使用iframe需要翻阅的帖子
- 前端知识 之 HTML
- 密码学40年|重要历史与人物
- 【Spring学习03】Spring简单入门实例
- 从车载小程序打造智能汽车生态
- java retained size_使用MAT时的Shallow Size和 Retained Size的区别
- 执业兽医资格考试水生动物类题库
- thinkpad x250装黑苹果教程_ThinkPad E450c 傻瓜式黑苹果一键安装教程
- 费氏(Fibonacci)数列、最大公约数,最小公倍数
- smtplib 改为通过SSL 465 发送邮件
- 从BAT到BATH 中国云计算世界杯大幕刚启
- 谷歌的seo原理是什么
- Google Maps API Key申请办法(最新)
- springboot+vue计算机旅游管理系统 springboot+vue旅游网
- ArcGIS Notebook Server 10.9.1 Linux版本安装示例
热门文章
- 联邦学习,为何而生?
- 都是程序员,凭什么他能站在鄙视链的顶端?
- 深度解析MegEngine亚线性显存优化技术
- 如何优雅地使用pdpipe与Pandas构建管道?
- 清华官宣:前百度总裁张亚勤正式加盟清华大学
- 钢铁侠“变身”AI布道师?小罗伯特·唐尼这次推出一部AI科普纪录片
- 作业盒子完成1.5亿美元D轮融资,更名“小盒科技”
- 掌声送给TensorFlow 2.0!用Keras搭建一个CNN | 入门教程
- 人工智能灵魂注入,燃烧你的卡路里——2018,你AI了吗!?
- 关掉可穿戴部门后,英特尔还将调整自动驾驶业务