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 相关文章推荐
400多行Python代码实现了一个FTP服务器
May 10 Python
解决python中使用plot画图,图不显示的问题
Jul 04 Python
对Python3中列表乘以某一个数的示例详解
Jul 20 Python
Python 爬虫实现增加播客访问量的方法实现
Oct 31 Python
Python3常用内置方法代码实例
Nov 18 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
Keras - GPU ID 和显存占用设定步骤
Jun 22 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 Python
Python远程方法调用实现过程解析
Jul 28 Python
python 代码运行时间获取方式详解
Sep 18 Python
python中time tzset()函数实例用法
Feb 18 Python
Python实现双向链表基本操作
May 25 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
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
Zend Framework框架Smarty扩展实现方法
2016/03/22 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
PHP封装XML和JSON格式数据接口操作示例
2019/03/06 PHP
Laravel配合jwt使用的方法实例
2020/10/25 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
javascript自动生成包含数字与字符的随机字符串
2015/02/09 Javascript
JS模式之单例模式基本用法
2015/06/30 Javascript
详解Angular 4.x NgIf 的用法
2017/05/22 Javascript
详解Node.js access_token的获取、存储及更新
2017/06/20 Javascript
jQuery实现简单的下拉菜单导航功能示例
2017/12/07 jQuery
form表单数据封装成json格式并提交给服务器的实现方法
2017/12/14 Javascript
js数组常用最重要的方法
2018/02/04 Javascript
json字符串传到前台input的方法
2018/08/06 Javascript
详解小程序设置缓存并且不覆盖原有数据
2019/04/15 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
详解Vue2的diff算法
2021/01/06 Vue.js
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
总结Python编程中三条常用的技巧
2015/05/11 Python
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
Python基于PycURL实现POST的方法
2015/07/25 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
python字符串,数值计算
2016/10/05 Python
python中的decorator的作用详解
2018/07/26 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
快速创建python 虚拟环境
2020/11/28 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
内勤岗位职责
2015/02/10 职场文书
JavaScript 实现页面滚动动画
2021/04/24 Javascript
python自动化之如何利用allure生成测试报告
2021/05/02 Python
SQL SERVER中的流程控制语句
2022/05/25 SQL Server
Spring Cloud OpenFeign模版化客户端
2022/06/25 Java/Android