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 相关文章推荐
最大K个数问题的Python版解法总结
Jun 16 Python
Python彩色化Linux的命令行终端界面的代码实例分享
Jul 02 Python
DataFrame 将某列数据转为数组的方法
Apr 13 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
Dec 11 Python
在python中以相同顺序shuffle两个list的方法
Dec 13 Python
Python实现Event回调机制的方法
Feb 13 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
Jul 25 Python
Python 实现一个手机号码获取妹子名字的功能
Sep 25 Python
Python实现的北京积分落户数据分析示例
Mar 27 Python
Python无头爬虫下载文件的实现
Apr 02 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
Aug 03 Python
python中编写函数并调用的知识点总结
Jan 13 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中的integer类型使用分析
2010/07/27 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
Add Formatted Text to a Word Document
2007/06/15 Javascript
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
javascript白色简洁计算器
2015/05/04 Javascript
ashx文件获取$.ajax()方法发送的数据
2016/05/26 Javascript
js图片放大镜效果实现方法详解
2020/10/28 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
element-ui组件中input等的change事件中传递自定义参数
2019/05/22 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
Python实现优先级队列结构的方法详解
2016/06/02 Python
Mac 上切换Python多版本
2017/06/17 Python
基于Django contrib Comments 评论模块(详解)
2017/12/08 Python
使用selenium模拟登录解决滑块验证问题的实现
2019/05/10 Python
python正则表达式实例代码
2020/03/03 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
python能在浏览器能运行吗
2020/06/17 Python
Cpython解释器中的GIL全局解释器锁
2020/11/09 Python
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
机电一体化职业规划书
2014/01/07 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
师德标兵事迹材料
2014/12/19 职场文书
怎样写好工作计划
2019/04/10 职场文书
python使用glob检索文件的操作
2021/05/20 Python
写好Python代码的几条重要技巧
2021/05/21 Python
python编写五子棋游戏
2021/05/25 Python
欧元符号 €
2022/02/17 杂记