python 简单的多线程链接实现代码


Posted in Python onAugust 28, 2016

服务端:

#!/usr/bin/env
import SocketServer
class myMonitorHandler(SocketServer.BaseRequestHandler):
 def handle(self):
  self.data=self.request.recv(1024).strip()
  print "From %s : %s" %(self.client_address,self.data)
if __name__=="__main__":
 HOST,PORT='0.0.0.0',18000
 server=SocketServer.ThreadingTCPServer((HOST,PORT),myMonitorHandler)
 server.serve_forever()
 server.close()

客户端:

#!/usr/bin/env python
import socket
host,port="10.23.30.191",18000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
s.send("UP")
~

服务端运行结果:
From ('10.23.30.61', 45809) : UP
From ('10.23.30.61', 45810) : UP
From ('10.23.30.61', 45811) : UP
From ('10.23.30.61', 45812) : UP
From ('10.23.30.61', 45813) : UP
From ('10.23.30.61', 45814) : UP
From ('10.23.30.61', 45815) : UP

python 简单的多线程链接(二)

一。简单的多线程(服务器端添加了时间标签)
1.1 服务端

#!/usr/bin/env
import datetime
import SocketServer
classmyMonitorHandler(SocketServer.BaseRequestHandler):
    def handle(self):
       self.data=self.request.recv(1024).strip()
        print "From %s : %s  :%s"%(self.client_address,datetime.datetime.now(),self.data)
if__name__=="__main__":
    HOST,PORT='0.0.0.0',18000
   server=SocketServer.ThreadingTCPServer((HOST,PORT),myMonitorHandler)
    server.serve_forever()
    server.close()

1.2 客户端:

#!/usr/bin/envpython

import socket

host,port="192.168.1.103",18000
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
s.send("UP")

结果:
From('192.168.1.104', 58032) : 2013-12-24 06:47:03.620356   :UP
From('192.168.1.104', 58033) : 2013-12-24 06:47:05.464851   :UP
From('192.168.1.104', 58034) : 2013-12-24 06:47:06.273092   :UP

二.服务器端添加时间标签后(判断30秒更新发送)

2.1 首先要有字典存放客户端的信息
先定义1个空字典

#!/usr/bin/env
importdatetime
importSocketServer
host_status={}

f=open('client.txt')
while 1:
    line=f.readline().split()
    if len(line)==0:break
    host_status[line[0]]= []
f.close()

classmyMonitorHandler(SocketServer.BaseRequestHandler):
    def handle(self):
       self.data=self.request.recv(1024).strip()
        if self.client_address[0] inhost_status.keys():
           host_status[self.client_address[0]].append((datetime.datetime.now(),self.data))
            print "From %s :%s  :%s"%(self.client_address,datetime.datetime.now(),self.data)
        else:
            print "sorry,IP %sis't in the monitor list!" %self.client_address[0]
        for t,m in host_status.items():
            print t,m

if__name__=="__main__":
    HOST,PORT='0.0.0.0',18000
   server=SocketServer.ThreadingTCPServer((HOST,PORT),myMonitorHandler)
    server.serve_forever()
    server.close()

解释:

#!/usr/bin/env
import datetime
import SocketServer
host_status={} #定义个空子典用来存储客户端发送的信息和时间

f=open('client.txt') #文件的读取
while 1:
    line=f.readline().split() #文件的读取并分段
    if len(line)==0:break  #结尾退出
host_status[line[0]]= [] #初始化字典,把文件中的ip设置为字典的key
f.close()

classmyMonitorHandler(SocketServer.BaseRequestHandler):
    def handle(self):
       self.data=self.request.recv(1024).strip()
        ifself.client_address[0] in host_status.keys():#如果获取客户端ip在字典的列表的key中
           host_status[self.client_address[0]].append((datetime.datetime.now(),self.data)) #这儿采用追加的方式
            print"From %s : %s  :%s"%(self.client_address,datetime.datetime.now(),self.data)#输出客户端的ip ,连接时间,发送的内容
        else:
            print"sorry,IP %s is't in the monitor list!" %self.client_address[0]#不在提示
        for t,m inhost_status.items():#字典输出
            printt,m  #字典的输出

if__name__=="__main__":
    HOST,PORT='0.0.0.0',18000
   server=SocketServer.ThreadingTCPServer((HOST,PORT),myMonitorHandler)
    server.serve_forever()
    server.close()

本文出自 “lzt417” 博客

Python 相关文章推荐
Python实现简单的多任务mysql转xml的方法
Feb 08 Python
Python动态生成多维数组的方法示例
Aug 09 Python
python实现推箱子游戏
Mar 25 Python
通过shell+python实现企业微信预警
Mar 07 Python
24式加速你的Python(小结)
Jun 13 Python
python中比较两个列表的实例方法
Jul 04 Python
Python迭代器iterator生成器generator使用解析
Oct 24 Python
Python安装whl文件过程图解
Feb 18 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
Feb 20 Python
Python 读取位于包中的数据文件
Aug 07 Python
python操作toml文件的示例代码
Nov 27 Python
Python re.sub 反向引用的实现
Jul 07 Python
python使用电子邮件模块smtplib的方法
Aug 28 #Python
python daemon守护进程实现
Aug 27 #Python
Python+微信接口实现运维报警
Aug 27 #Python
python实现获取Ip归属地等信息
Aug 27 #Python
python简单实现获取当前时间
Aug 27 #Python
python使用psutil模块获取系统状态
Aug 27 #Python
Django Highcharts制作图表
Aug 27 #Python
You might like
php 分库分表hash算法
2009/11/12 PHP
php简单操作mysql数据库的类
2015/04/16 PHP
PHP获取音频文件的相关信息
2015/06/22 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
2016/09/11 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
PHP实现正则匹配所有括号中的内容
2018/06/22 PHP
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
2009/09/09 Javascript
javascript function调用时的参数检测常用办法
2010/02/26 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
Bootstrap实现带动画过渡的弹出框
2016/08/09 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
2017/03/08 Javascript
Vue.directive自定义指令的使用详解
2017/03/10 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
2018/09/15 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
Python实现KNN邻近算法
2021/01/28 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
将python运行结果保存至本地文件中的示例讲解
2019/07/11 Python
pycharm实现print输出保存到txt文件
2020/06/01 Python
通俗讲解python 装饰器
2020/09/07 Python
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
新锐科技Java程序员面试题
2016/07/25 面试题
大学生毕业自我鉴定
2013/11/06 职场文书
2014法制宣传日活动总结
2014/07/09 职场文书
小学教师教育随笔
2015/08/14 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书