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读写Redis数据库操作示例
Mar 18 Python
python2.7 json 转换日期的处理的示例
Mar 07 Python
python实现图书管理系统
Mar 12 Python
Python基于多线程操作数据库相关问题分析
Jul 11 Python
对python 命令的-u参数详解
Dec 03 Python
Python实现带下标索引的遍历操作示例
May 30 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
Mar 16 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
Apr 16 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
Jun 02 Python
python中round函数如何使用
Jun 19 Python
pytorch显存一直变大的解决方案
Apr 08 Python
使用python绘制横竖条形图
Apr 21 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 foreach循环中使用引用的问题
2013/11/06 PHP
ThinkPHP之getField详解
2014/06/20 PHP
3种方法轻松处理php开发中emoji表情的问题
2016/07/18 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
PHP常用header头定义代码示例汇总
2020/08/29 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
JavaScript实现的encode64加密算法实例分析
2015/04/15 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
JS与HTML结合实现流程进度展示条思路详解
2017/09/03 Javascript
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
微信小程序反编译的实现
2020/12/10 Javascript
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
python比较2个xml内容的方法
2015/05/11 Python
浅谈Python单向链表的实现
2015/12/24 Python
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
Python socket 套接字实现通信详解
2019/08/27 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
Django2.1.7 查询数据返回json格式的实现
2020/12/29 Python
HTML5之SVG 2D入门12—SVG DOM及DOM操作介绍
2013/01/30 HTML / CSS
索尼巴西商店:Sony巴西
2019/06/21 全球购物
英国网上自行车商店:Tredz Bikes
2019/10/29 全球购物
乡镇民主生活会发言材料
2014/10/20 职场文书
幼儿园个人总结
2015/02/28 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
看上去很美观后感
2015/06/10 职场文书
高一化学教学反思
2016/02/22 职场文书
PostgreSQL存储过程实用脚本(二):创建函数入门
2021/04/05 PostgreSQL