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中index()和seek()的用法(详解)
Apr 27 Python
Django REST为文件属性输出完整URL的方法
Dec 18 Python
python如何压缩新文件到已有ZIP文件
Mar 14 Python
python计算两个数的百分比方法
Jun 29 Python
python检测IP地址变化并触发事件
Dec 26 Python
Python使用pymongo库操作MongoDB数据库的方法实例
Feb 22 Python
在Pandas中处理NaN值的方法
Jun 25 Python
python中dict()的高级用法实现
Nov 13 Python
深入了解如何基于Python读写Kafka
Dec 31 Python
Python2 与Python3的版本区别实例分析
Mar 30 Python
Pyinstaller打包Scrapy项目的实现步骤
Sep 22 Python
python3中apply函数和lambda函数的使用详解
Feb 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的远程图片抓取函数分享
2013/09/25 PHP
PHP Reflection API详解
2015/05/12 PHP
List the Codec Files on a Computer
2007/06/11 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
父节点获取子节点的字符串示例代码
2014/02/26 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
ES6正则表达式扩展笔记
2017/07/25 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
js实现拾色器插件(ColorPicker)
2020/05/21 Javascript
Vue filter 过滤器、以及在table中的使用介绍
2020/09/07 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
用Python计算三角函数之acos()方法的使用
2015/05/15 Python
Windows10下 python3.7 安装 facenet的教程
2019/09/10 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
Elizabeth Gage官网:英国最好的珠宝设计之一
2020/09/26 全球购物
优秀毕业生求职信范文
2014/01/02 职场文书
音乐幼师求职信
2014/07/09 职场文书
科技活动周标语
2014/10/08 职场文书
男方婚礼答谢词
2015/01/20 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
观后感的写法
2015/06/19 职场文书
校运会新闻稿
2015/07/17 职场文书
《秋天的雨》教学反思
2016/02/19 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS
mysql5.6主从搭建以及不同步问题详解
2021/12/04 MySQL