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数据结构之二叉树的统计与转换实例
Apr 29 Python
python求众数问题实例
Sep 26 Python
python下如何查询CS反恐精英的服务器信息
Jan 17 Python
如何在django里上传csv文件并进行入库处理的方法
Jan 02 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
Jan 05 Python
Python开发网站目录扫描器的实现
Feb 21 Python
python日期相关操作实例小结
Jun 24 Python
详解python中自定义超时异常的几种方法
Jul 29 Python
python使用多线程+socket实现端口扫描
May 28 Python
Python基于pyjnius库实现访问java类
Jul 31 Python
Python 程序员必须掌握的日志记录
Aug 17 Python
Python实现灰色关联分析与结果可视化的详细代码
Mar 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中一个有意思的日期逻辑处理
2012/03/25 PHP
解析zend Framework如何自动加载类
2013/06/28 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
PHP微信支付实例解析
2016/07/22 PHP
PHP常量define和const的区别详解
2019/05/18 PHP
Yii框架视图、视图布局、视图数据块操作示例
2019/10/14 PHP
PHP内存溢出优化代码详解
2021/02/26 PHP
让您的菜单不离网站
2006/10/03 Javascript
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
js读取配置文件自写
2014/02/11 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
2015/11/30 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
Python语言实现机器学习的K-近邻算法
2015/06/11 Python
Python中datetime常用时间处理方法
2015/06/15 Python
Python命令启动Web服务器实例详解
2017/02/23 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
python从zip中删除指定后缀文件(推荐)
2019/12/05 Python
python动态文本进度条的实例代码
2020/01/22 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
深入浅析python变量加逗号,的含义
2020/02/22 Python
英国在线发型和美容产品商店:Beauty Cutie
2019/04/27 全球购物
杭州龙健科技笔试题.net部分笔试题
2016/01/24 面试题
自我评价200字分享
2013/12/17 职场文书
就业协议书怎么填
2014/04/11 职场文书
市场营销策划方案
2014/06/11 职场文书
法定代表人授权委托书范本
2014/10/07 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
Python极值整数的边界探讨分析
2021/09/15 Python
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
2022/06/01 Java/Android
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL