Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】


Posted in Python onOctober 12, 2019

本文实例讲述了Python 网络编程之TCP客户端/服务端功能。分享给大家供大家参考,具体如下:

demo.py(TCP客户端):

import socket
def main():
  # 1. 创建tcp的套接字
  tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  # 2. 链接服务器
  # tcp_socket.connect(("192.168.33.11", 7890))
  server_ip = input("请输入要链接的服务器的ip:")
  server_port = int(input("请输入要链接的服务器的port:"))
  server_addr = (server_ip, server_port)
  tcp_socket.connect(server_addr)
  # 3. 发送数据/接收数据
  send_data = input("请输入要发送的数据:")
  tcp_socket.send(send_data.encode("utf-8"))
  # 接收数据。 会阻塞代码,直到接收到数据
  recv_data = tcp_socket.recv(1024) # 1024表示本次接收的最大字节数。
  print(recv_data.decode("utf-8"))
  # 4. 关闭套接字
  tcp_socket.close()
if __name__ == "__main__":
  main()

demo.py(TCP服务端):

import socket
def main():
  # 1. 创建套接字 socket
  tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  # 设置当服务器先close 即服务器端4次挥手之后资源能够立即释放,这样就保证了,下次运行程序时 可以立即绑定7890端口 (如果服务端先close,再启动服务端就不会报端口被占用的错误。)
  tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  # 2. 绑定本机ip和端口号 bind
  tcp_server_socket.bind(("", 7890))
  # 3. 监听客户端的链接请求 listen (由主动去链接服务器,变成被客户端链接)
  tcp_server_socket.listen(128) # 128影响链接客户端的数量(并发量)(和操作系统也有关)
  # 4. 接受客户端的链接 accept。 会阻塞代码,直到有客户端链接
  new_client_socket, client_addr = tcp_server_socket.accept()
  print(client_addr) # ("192.168.33.109",53766) 客户端的ip和端口
  # 接收客户端发送过来的数据。 会阻塞代码,直到接收到数据
  recv_data = new_client_socket.recv(1024) # 1024表示本次接收的最大字节数。
  print(recv_data.decode("utf-8")) # 如果recv_data为空,表示客户端断开链接
  # 写数据给客户端
  new_client_socket.send("hahahghai-----ok-----".encode("utf-8"))
  # 关闭套接字
  new_client_socket.close() # 与客户端通信的套接字
  tcp_server_socket.close() # 服务器套接字
if __name__ == "__main__":
  main()

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
学习python (1)
Oct 31 Python
从零学Python之入门(三)序列
May 25 Python
使用Python的urllib2模块处理url和图片的技巧两则
Feb 18 Python
python3获取当前文件的上一级目录实例
Apr 26 Python
python将控制台输出保存至文件的方法
Jan 07 Python
python 画出使用分类器得到的决策边界
Aug 21 Python
Python从文件中读取指定的行以及在文件指定位置写入
Sep 06 Python
Python监控服务器实用工具psutil使用解析
Dec 19 Python
使用Python 自动生成 Word 文档的教程
Feb 13 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
Jun 06 Python
python中Django文件上传方法详解
Aug 05 Python
Python Selenium实现无可视化界面过程解析
Aug 25 Python
Python Collatz序列实现过程解析
Oct 12 #Python
python logging日志模块原理及操作解析
Oct 12 #Python
Python爬虫之urllib基础用法教程
Oct 12 #Python
python 生成器和迭代器的原理解析
Oct 12 #Python
python 表格打印代码实例解析
Oct 12 #Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 #Python
python3.7将代码打包成exe程序并添加图标的方法
Oct 11 #Python
You might like
php打造属于自己的MVC框架
2012/03/07 PHP
PHP函数microtime()用法与说明
2013/12/04 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
Laravel框架控制器的middleware中间件用法分析
2019/09/30 PHP
js函数的引用, 关于内存的开销
2012/09/17 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
2015/06/16 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
[02:53]DOTA2亚洲邀请赛 NewBee战队巡礼
2015/02/03 DOTA
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
2020/02/25 Python
7款设计巧妙的css3飘带状3D立体效果的导航菜单和表单窗口
2013/02/04 HTML / CSS
纯CSS3绘制打火机动画火焰效果
2016/07/18 HTML / CSS
Java语言程序设计测试题判断题部分
2013/01/06 面试题
医生实习工作总结的自我评价
2013/09/27 职场文书
大型营销活动计划书
2014/04/28 职场文书
文明社区申报材料
2014/08/21 职场文书
武夷山导游词
2015/02/03 职场文书
客服专员岗位职责范本
2015/04/07 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书
《月光曲》教学反思
2016/02/16 职场文书
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android