Python网络编程之TCP套接字简单用法示例


Posted in Python onApril 09, 2018

本文实例讲述了Python网络编程之TCP套接字简单用法。分享给大家供大家参考,具体如下:

上学期学的计算机网络,因为之前还未学习python,而java则一知半解,C写起来又麻烦,所以一直都没有真正实现过TCP套接字编程。

最近学习了python,而用它来写套接字又十分方便简单,所以当然要试一试咯。

下面根据代码来介绍一下最简单的tcp程序,由客户端输入数据,发送给服务器,服务器加上时间后返回给客户端

#!/usr/bin/python
'test TCP server'
from socket import *  #套接字所需要的模块
from time import ctime  #时间模块
HOST = ''  #主机名,为空,表示可以绑定在任何有效的地址上。
PORT = 21567  #随机选的可用端口
BUFSIZ = 1024  #发送数据的缓冲区
ADDR = (HOST, PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM)  #第一个参数是socket_family,此处用常用的AF_INET,第二个参数是流套接字,即创建的是tcp
tcpSerSock.bind(ADDR)  #套接字与地址绑定
tcpSerSock.listen(5)  #开始监听,参数表示允许的最大连接数
while True:
  print 'waiting for connection...'
  tcpCliSock, addr = tcpSerSock.accept()  #打开大门等待客人,accept返回一个元组(connection,address)。第一个元素是新的socket对象,服务器必须通过它与客户通信;第二个是客户的地址。
  print '...connected from:',addr
  while True:
    data = tcpCliSock.recv(BUFSIZ)  #洗耳恭听,把客人的话记录到data中
    if not data:  #客人话说完了,送客
      break
    tcpCliSock.send('[%s] %s' %(ctime(), data))  #发送当前时间,以及数据给客人
  tcpCliSock.close()  #送客,关闭与该客人通信的套接字
tcpSerSock.close()  #因为上面是死循环,此处不是必须的,只是提醒大家离开的时候务必要关门!

上面用到了两个套接字,第一个tcpSerSock称为欢迎套接字,第二个tcpCliSock才是真正负责与客户端通信的套接字,这样做的好处是,一个服务器可以同时接待多个客人。

下面则是客户端的代码,非常简单:

#!/usr/bin/python
'test tcp client'
from socket import *
HOST = 'localhost'  #因为我是在同一台机器上运行,所以是localhost,不同主机的话,此处需要改成服务器地址
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)
tcpCliSock = socket(AF_INET, SOCK_STREAM)  #客户端只需要一个套接字
tcpCliSock.connect(ADDR)  #发起连接
while True:
  data = raw_input('>')
  tcpCliSock.send(data)  #发送数据
  if not data:
    break
  data = tcpCliSock.recv(BUFSIZ)  #接收数据
  print data
tcpCliSock.close()

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

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

Python 相关文章推荐
python计算N天之后日期的方法
Mar 31 Python
详解python的数字类型变量与其方法
Nov 20 Python
python线程池(threadpool)模块使用笔记详解
Nov 17 Python
[原创]pip和pygal的安装实例教程
Dec 07 Python
浅述python2与python3的简单区别
Sep 19 Python
对Python之gzip文件读写的方法详解
Feb 08 Python
命令行运行Python脚本时传入参数的三种方式详解
Oct 11 Python
基于Python实现船舶的MMSI的获取(推荐)
Oct 21 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
Oct 25 Python
Python中bisect的使用方法
Dec 31 Python
python获取时间戳的实现示例(10位和13位)
Sep 23 Python
python数字图像处理数据类型及颜色空间转换
Jun 28 Python
python3 读写文件换行符的方法
Apr 09 #Python
Python基于TCP实现会聊天的小机器人功能示例
Apr 09 #Python
Python生成任意范围任意精度的随机数方法
Apr 09 #Python
python网络爬虫学习笔记(1)
Apr 09 #Python
Python中defaultdict与lambda表达式用法实例小结
Apr 09 #Python
Python3 实现随机生成一组不重复数并按行写入文件
Apr 09 #Python
python生成不重复随机数和对list乱序的解决方法
Apr 09 #Python
You might like
php实现字符串反转输出的方法
2015/03/14 PHP
Google 静态地图API实现代码
2010/11/19 Javascript
JQuery datepicker 使用方法
2011/05/20 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
javascript常用功能汇总
2015/07/05 Javascript
快速学习jQuery插件 Cookie插件使用方法
2015/12/01 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
2016/07/22 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
js简单遍历获取对象中的属性值的方法示例
2019/06/19 Javascript
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
微信小程序中限制激励式视频广告位显示次数(实现思路)
2019/12/06 Javascript
[01:30]DOTA2上海特锦赛现场采访 Loda倾情献唱
2016/03/25 DOTA
Python设计模式之抽象工厂模式
2016/08/25 Python
Python 加密与解密小结
2018/12/06 Python
更新修改后的Python模块方法
2019/03/03 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
2019/07/31 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
2020/02/17 Python
常用的10个Python实用小技巧
2020/08/10 Python
python 生成器需注意的小问题
2020/09/29 Python
python日志通过不同的等级打印不同的颜色(示例代码)
2021/01/13 Python
Mytheresa中国官网:德国时尚奢侈品商城
2017/08/04 全球购物
高级工程师英文求职信
2014/03/19 职场文书
小区的门卫岗位职责
2014/10/01 职场文书
毛主席纪念堂观后感
2015/06/17 职场文书
Python Django ORM连表正反操作技巧
2021/06/13 Python
世界无敌的ICOM IC-R9500宽频接收机
2022/03/25 无线电
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js