Python简单实现socket信息发送与监听功能示例


Posted in Python onJanuary 03, 2018

本文实例讲述了Python简单实现socket信息发送与监听功能。分享给大家供大家参考,具体如下:

最近在研究boost C++库,用于工作中处理大规模高并发TCP连接数据响应,想测试,也可以用boost::asio库来写,但不利于测试代码的灵活修改。

于是就研究了一下python怎么做。学习过程中看到网上给出的代码示例虽然很基础易懂,对于python零基础的人来说,完全可以稍微复杂些,配上一些注释,就能更多掌握一些socket和python的基本语法知识。

于是根据我的使用需要,修改python的socket server和client的范例代码如下:

server端(单线程)

# -*- coding: cp936 -*-
'''''
建立一个python server,监听指定端口,
如果该端口被远程连接访问,则获取远程连接,然后接收数据,
并且做出相应反馈。
'''
if __name__=="__main__":
    import socket
  print "Server is starting"
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(('localhost', 8001)) #配置soket,绑定IP地址和端口号
    sock.listen(5) #设置最大允许连接数,各连接和server的通信遵循FIFO原则
    print "Server is listenting port 8001, with max connection 5"
    while True: #循环轮询socket状态,等待访问
        connection,address = sock.accept()
        try:
            connection.settimeout(50)
            #获得一个连接,然后开始循环处理这个连接发送的信息
            '''''
            如果server要同时处理多个连接,则下面的语句块应该用多线程来处理,
            否则server就始终在下面这个while语句块里被第一个连接所占用,
            无法去扫描其他新连接了,但多线程会影响代码结构,所以记得在连接数大于1时
            下面的语句要改为多线程即可。
            '''
            while True:
                buf = connection.recv(1024)
                print "Get value " +buf
                if buf == '1':
                  print "send welcome"
                  connection.send('welcome to server!')
                elif buf!='0':
                  connection.send('please go out!')
                  print "send refuse"
                else:
                  print "close"
                  break #退出连接监听循环
        except socket.timeout: #如果建立连接后,该连接在设定的时间内无数据发来,则time out
             print 'time out'
        print "closing one connection" #当一个连接监听循环退出后,连接可以关掉
        connection.close()

client端,每隔3秒轮番发送不同的数据给server:

if __name__=="__main__":
    import socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(('localhost', 8001))
    import time
    flag = '1'
    while True:
        time.sleep(3)
        print 'send to server with value: '+ flag
        sock.send(flag)
        print sock.recv(1024)
        flag = (flag=='1') and '2' or '1' #change to another type of value each time
    sock.close()

执行上面两段代码后,可以得到如下结果:

先执行server.py:

C:\Users\YanBo>D:\server.py
Server is starting
Server is listenting port 8001, with max connection 5

执行client后:

C:\Users\YanBo>D:\client.py
send to server with value: 1
welcome to server!
send to server with value: 2
please go out!
send to server with value: 1
welcome to server!
send to server with value: 2
please go out!
.....

server则相应输出:

Get value 1
send welcome
Get value 2
send refuse
.....

如果在linux下,用

$ lsof -i:8001

则可以列出正在执行的server和client进程,因为他们占用了端口8001

yanbo@yanbo-linux64-01:~$ lsof -i:8001
COMMAND PID USER  FD  TYPE DEVICE SIZE/OFF NODE NAME
python 2413 yanbo  3u IPv4 12907   0t0 TCP localhost:8001 (LISTEN)
python 2413 yanbo  4u IPv4 12910   0t0 TCP localhost:8001->localhost:38609 (ESTABLISHED)
python 2469 yanbo  3u IPv4 12222   0t0 TCP localhost:38609->localhost:8001 (ESTABLISHED)

可以看出,进程2413是server.py 2469是client.py

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

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

Python 相关文章推荐
tensorflow构建BP神经网络的方法
Mar 12 Python
python实现读取大文件并逐行写入另外一个文件
Apr 19 Python
python的pip安装以及使用教程
Sep 18 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
Dec 07 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
Python使用matplotlib 模块scatter方法画散点图示例
Sep 27 Python
浅析使用Python搭建http服务器
Oct 27 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
Python中实现输入一个整数的案例
May 03 Python
Python实现画图软件功能方法详解
Jul 28 Python
python图片合成的示例
Nov 09 Python
Python监听键盘和鼠标事件的示例代码
Nov 18 Python
python实现Floyd算法
Jan 03 #Python
Python如何生成树形图案
Jan 03 #Python
Python爬取十篇新闻统计TF-IDF
Jan 03 #Python
Python制作词云的方法
Jan 03 #Python
Python读取Json字典写入Excel表格的方法
Jan 03 #Python
python基于ID3思想的决策树
Jan 03 #Python
python遍历文件夹下所有excel文件
Jan 03 #Python
You might like
mysql中存储过程、函数的一些问题
2007/02/14 PHP
php去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
浅析Mysql 数据回滚错误的解决方法
2013/08/05 PHP
php分页函数示例代码分享
2014/02/24 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
PHP Reflection API详解
2015/05/12 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
PHP与SQL语句写一句话木马总结
2019/10/11 PHP
js变换显示图片的实例
2013/04/16 Javascript
JavaScript中常见的字符串操作函数及用法汇总
2015/05/04 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
纯js的右下角弹窗实例
2017/03/12 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
一个计算身份证号码校验位的Python小程序
2014/08/15 Python
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
python方向键控制上下左右代码
2018/01/20 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
Python切片列表字符串如何实现切换
2020/08/06 Python
eDreams巴西:廉价机票,酒店优惠和度假套餐
2017/04/14 全球购物
Hotels.com拉丁美洲:从豪华酒店到经济型酒店的预定优惠和折扣
2019/12/09 全球购物
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
linux下进程间通信的方式
2014/12/23 面试题
无工作经验者个人求职信范文
2013/12/22 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
2015年学校安全工作总结
2015/04/22 职场文书
python爬取豆瓣电影TOP250数据
2021/05/23 Python