Python基本socket通信控制操作示例


Posted in Python onJanuary 30, 2019

本文实例讲述了Python基本socket通信控制操作。分享给大家供大家参考,具体如下:

python — 基本socket通信控制(控制在celie.txt文件中主机IP地址可以发送信息,并返回对应的客户端IP、时间戳、发送的信息)

客户端代码

root@72129clent:~/python/snmp# ls
snmpclenit.py tab.py
root@72129clent:~/python/snmp# cat snmpclenit.py
#!/usr/bin/python
# --*-- coding:utf-8 --*--
import socket
host,port = '192.168.72.130',18000
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#调用IPv4协议
s.connect((host,port))#连接主机与端口
s.send("up")#客户端给服务器端发送数据“up”
s.close()
root@72129clent:~/python/snmp#

服务器短信代码:

root@kali:~/python/snmp# ls
celie.txt snmpserver.py tab.py tab.pyc
root@kali:~/python/snmp# cat celie.txt
192.168.72.129 xuweibo
root@kali:~/python/snmp#
root@kali:~/python/snmp# cat snmpserver.py
#!/usr/bin/python
# --*-- coding:utf-8 --*--
import datetime#导入时间戳
import SocketServer
#读取目录下的celie.txt文件
host_status = {}#新建字典,使用IP地址作为KEY值。作用是来判断每个客户端IP多久与服务器通信一次的
f = open('celie.txt')#调用策略文档,在里面的ip地址就可以通过,并发送信息
while True:
  line = f.readline().split()
  if len(line) == 0:break
  print line[0]#打印第一个IP地址信息
  host_status[line[0]] = []#给字典第一个设置为空,这样后面只要直接追加值就ok了
f.close()
class myMonitorHandler(SocketServer.BaseRequestHandler):
  '''This is the Monitor server'''
  def handle(self):
    recv_data = self.request.recv(1024)#接收客户端数据
    if self.client_address[0] in host_status.keys():#如果存在字典中的ip地址信息,就返回对应客户端发送的Ip、时间戳、信息
      #self.client_address为数组('192.168.72.129', 49109)的值。只要当中的IP地址,因此取self.client_address[0]
      #把host_status字典中的self.client_address[0]值即IP地址值赋值有两个值,因此新建个列表,存取两个值时间戳与接收的信息
      #如:{'192.168.72.129': [(datetime.datetime(2017, 8, 20, 21, 29, 59, 415054), 'up')]}
      #host_status[self.client_address[0]] = [(datetime.datetime.now(),recv_data)]
      #直接把元组append进字典
      host_status[self.client_address[0]].append((datetime.datetime.now(),recv_data))
      print 'From %s : %s %s' %(self.client_address,datetime.datetime.now(),recv_data)#打印客户端地址、操作的时间戳值与接收的数据
      #print host_status
    else:#不存在字典中,则如下提示信息
      print "sorry, ip %s is not in the monitor list" % self.client_address[0]
    #打印出192.168.72.129 [(datetime.datetime(2017, 8, 20, 22, 1, 6, 705498), 'up')]
    for t,m in host_status.items():
      print t,m
if __name__ == "__main__":#当自己运行时调用什么什么;当被其他程序调用时调用什么什么,如果被其他程序调用了,下面代码不执行
  host,port = '',18000
  server = SocketServer.ThreadingTCPServer((host,port),myMonitorHandler)#调用TCP的多线程
  server.serve_forever()
root@kali:~/python/snmp#

脚本运行情况

服务器端运行:

root@kali:~/python/snmp# lsof -i:18000
COMMAND  PID USER  FD  TYPE DEVICE SIZE/OFF NODE NAME
python 14190 root  3u IPv4 45472   0t0 TCP *:18000 (LISTEN)
root@kali:~/python/snmp# kill -9 14190
root@kali:~/python/snmp# python snmpserver.py
192.168.72.129

在celie.txt中192.168.72.129的客户端运行:

root@72129clent:~/python/snmp# python snmpclenit.py
root@72129clent:~/python/snmp# python snmpclenit.py
root@72129clent:~/python/snmp# python snmpclenit.py
root@72129clent:~/python/snmp# python snmpclenit.py
root@72129clent:~/python/snmp# python snmpclenit.py
root@72129clent:~/python/snmp#

不在celie.txt中192.168.72.1的客户端运行:

192.168.72.1的snmpclinet.py脚本语句:

#!/usr/bin/python
# --*-- coding:utf-8 --*--
import socket
host,port = '192.168.72.130',18000
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#调用IPv4协议
s.connect((host,port))#连接主机与端口
s.send("up")#客户端给服务器端发送数据“up”
s.close()

192.168.72.1的客户端运行:

C:\Python27>python.exe snmpclinet.py
C:\Python27>python.exe snmpclinet.py
C:\Python27>python.exe snmpclinet.py
C:\Python27>python.exe snmpclinet.py
C:\Python27>python.exe snmpclinet.py
C:\Python27>

再次查看服务器端运行情况:

root@kali:~/python/snmp# lsof -i:18000
COMMAND  PID USER  FD  TYPE DEVICE SIZE/OFF NODE NAME
python 14190 root  3u IPv4 45472   0t0 TCP *:18000 (LISTEN)
root@kali:~/python/snmp# kill -9 14190
root@kali:~/python/snmp# python snmpserver.py
192.168.72.129
From ('192.168.72.129', 49208) : 2017-08-20 23:31:41.125892 up
192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up')]
From ('192.168.72.129', 49209) : 2017-08-20 23:31:57.141410 up
192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up')]
From ('192.168.72.129', 49210) : 2017-08-20 23:31:57.747056 up
192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 747038), 'up')]
From ('192.168.72.129', 49211) : 2017-08-20 23:31:58.394295 up
192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 747038), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 394273), 'up')]
From ('192.168.72.129', 49212) : 2017-08-20 23:31:58.887359 up
192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 747038), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 394273), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 887340), 'up')]
sorry, ip 192.168.72.1 is not in the monitor list
192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 747038), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 394273), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 887340), 'up')]
sorry, ip 192.168.72.1 is not in the monitor list
192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 747038), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 394273), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 887340), 'up')]
sorry, ip 192.168.72.1 is not in the monitor list
192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 747038), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 394273), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 887340), 'up')]
sorry, ip 192.168.72.1 is not in the monitor list
192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 747038), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 394273), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 887340), 'up')]
sorry, ip 192.168.72.1 is not in the monitor list
192.168.72.129 [(datetime.datetime(2017, 8, 20, 23, 31, 41, 125872), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 141389), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 57, 747038), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 394273), 'up'), (datetime.datetime(2017, 8, 20, 23, 31, 58, 887340), 'up')]

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

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

Python 相关文章推荐
python实现博客文章爬虫示例
Feb 26 Python
在Python的Django框架中获取单个对象数据的简单方法
Jul 17 Python
详解python中requirements.txt的一切
Mar 03 Python
python 二分查找和快速排序实例详解
Oct 13 Python
python实现图片筛选程序
Oct 24 Python
利用ctypes获取numpy数组的指针方法
Feb 12 Python
8种用Python实现线性回归的方法对比详解
Jul 10 Python
python 使用while循环输出*组成的菱形实例
Apr 12 Python
python dict乱码如何解决
Jun 07 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 Python
Python之基础函数案例详解
Aug 30 Python
Python mutiprocessing多线程池pool操作示例
Jan 30 #Python
Python多线程处理实例详解【单进程/多进程】
Jan 30 #Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
Jan 30 #Python
python实现烟花小程序
Jan 30 #Python
Python面向对象程序设计示例小结
Jan 30 #Python
python实现浪漫的烟花秀
Jan 30 #Python
新年快乐! python实现绚烂的烟花绽放效果
Jan 30 #Python
You might like
晶体管来复再生式二管收音机
2021/03/02 无线电
检查php文件中是否含有bom的函数
2012/05/31 PHP
php单例模式实现(对象只被创建一次)
2012/12/05 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
php中preg_match的isU代表什么意思
2015/10/01 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
jQuery 使用手册(一)
2009/09/23 Javascript
js类的静态属性和实例属性的理解
2009/10/01 Javascript
javascript onmouseout 解决办法
2010/07/17 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
2013/03/04 Javascript
js简单实现根据身份证号码识别性别年龄生日
2013/11/29 Javascript
通过Jquery的Ajax方法读取将table转换为Json
2014/05/31 Javascript
javascript css红色经典选项卡效果实现代码
2016/05/17 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
jQuery实现简单日期格式化功能示例
2017/09/19 jQuery
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
Vue 动态设置路由参数的案例分析
2018/04/24 Javascript
jQuery插件Validation表单验证详解
2018/05/26 jQuery
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
VUE 解决mode为history页面为空白的问题
2019/11/01 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
2019/12/17 Javascript
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
Python读写Redis数据库操作示例
2014/03/18 Python
python实现感知器
2017/12/19 Python
python实现kNN算法
2017/12/20 Python
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
使用python对excle和json互相转换的示例
2018/10/23 Python
Python netmiko模块的使用
2020/02/14 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
毕业生文员求职信
2013/11/03 职场文书
单位成立周年感言
2014/01/26 职场文书
《金钱的魔力》教学反思
2014/02/24 职场文书
科长个人四风问题整改措施思想汇报
2014/10/13 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers