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 基础学习教程
Feb 08 Python
Python Web开发模板引擎优缺点总结
May 06 Python
利用一个简单的例子窥探CPython内核的运行机制
Mar 30 Python
Python numpy实现数组合并实例(vstack,hstack)
Jan 09 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
Jun 19 Python
python设置环境变量的作用和实例
Jul 09 Python
Django REST Framework之频率限制的使用
Sep 29 Python
python 求10个数的平均数实例
Dec 16 Python
Scrapy框架基本命令与settings.py设置
Feb 06 Python
tensorflow与numpy的版本兼容性问题的解决
Jan 08 Python
Python+uiautomator2实现自动刷抖音视频功能
Apr 29 Python
Pygame Event事件模块的详细示例
Nov 17 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
也谈截取首页新闻 - 范例
2006/10/09 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
解析JavaScript中的标签语句
2013/06/19 Javascript
PHP abstract与interface之间的区别
2013/11/11 Javascript
JavaScript调用客户端的可执行文件(示例代码)
2013/11/28 Javascript
js中replace的用法总结
2013/12/27 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
Highcharts学习之坐标轴
2016/08/02 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
vue中的适配px2rem示例代码
2018/11/19 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
微信小程序textarea层级过高的解决方法
2019/03/04 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
零基础学Python(一)Python环境安装
2014/08/20 Python
python实现ip地址的包含关系判断
2020/02/07 Python
python实现udp传输图片功能
2020/03/20 Python
Django后端分离 使用element-ui文件上传方式
2020/07/12 Python
Python基于tkinter canvas实现图片裁剪功能
2020/11/05 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
python接口自动化框架实战
2020/12/23 Python
男方父母婚礼答谢词
2014/01/25 职场文书
党支部换届选举方案
2014/05/08 职场文书
专科生就业求职信
2014/06/22 职场文书
防邪知识进家庭活动方案
2014/08/26 职场文书
初中学习计划书范文
2014/09/15 职场文书
办公室主任四风问题对照检查材料思想汇报
2014/09/28 职场文书
辩论赛新闻稿
2015/07/17 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL
Golang表示枚举类型的详细讲解
2021/09/04 Golang
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis