机房管理软件或者教学软件一般都由服务器和客户端组成,当客户端启动之后会自动搜索服务器,这是如何实现的呢?下面通过一段代码来演示其中一种比较高效的方法。

客户端代码:

import socket
import time

def findServer():
    #创建socket对象
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    #绑定socket
    sock.bind(('', 5000))
    while True:
        #接收信息
        data, addr = sock.recvfrom(1024)
        #服务器广播信息
        if data.decode() == 'ServerIP':
            #查看服务器IP
            print(addr[0])
        #休息一秒后
        time.sleep(1)

findServer()

服务端代码:

import socket
import time

def findServer():
    #检查是否已有服务器运行
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.bind(('', 5000))
    for i in range(3):
        data, addr = sock.recvfrom(1024)
        if data.decode() == 'ServerIP':
            sock.close()
            return True
        time.sleep(0.5)
    sock.close()
    return False

def sendServerIP():
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    while True:
        #获取本机IP
        IP = socket.gethostbyname(socket.gethostname())
        #255表示广播地址
        IP = IP[:IP.rindex('.')]+'.255'
        #发送信息
        sock.sendto('ServerIP'.encode(), (IP, 5000))
        time.sleep(1)

already = findServer()
#如果已有服务器运行,则不再启动
if not already:
    sendServerIP()

温馨提示:单击文章顶部作者名字旁边浅蓝色的“Python小屋”进入公众号,关注后可以查看更多内容!

欢迎转发给您的朋友,或许这正是Ta需要的知识!

Python使用UDP广播实现服务器自动发现相关推荐

  1. android nsd和udp广播,Android网络服务发现(NSD)使用

    Android网络服务发现(NSD)使用 NSD(NsdManager)是Android SDK中自带的类库,可以集成直接使用. 使用 NSD服务需要(android4.1及以上) minSdkVer ...

  2. Python实现UDP广播

    服务器端和正常服务器端实现相同: import sockets = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)s.setsockopt(socke ...

  3. Python标准库socketserver实现UDP协议时间服务器

    Python标准库socket提供了套接字编程所需要的绝大部分功能,更多案例详见文末相关阅读. 很久之前推送过一个使用标准库socket实现UDP协议时间服务器的代码,参考 Python使用UDP协议 ...

  4. Python版课堂管理系统中使用UDP广播远程关闭客户端程序思路与源码

    本文代码来自于我自己使用开发的一套课堂管理系统,界面是用tkinter编写的,教师端界面如图所示: 为了防止学生关闭客户端而接收不到屏幕广播,大概3个月前为客户端代码增加了不允许关闭的辅助功能: de ...

  5. 实现ISA2004的WPAD(自动发现功能)

    使ISA的功能和特性得到完全的体现,需要客户端安装FWC.其实原本我都是用sNAT模式,后来因为要做基于AD的身份验证访问,所以需要用到代理方式,为了客户端能够快速的配置,决定分发FWC,但是因为其默 ...

  6. Qt | UDP广播通信的使用、实战项目使用案例

    Qt | UDP广播通信的使用.实战项目使用案例 1.UDP广播介绍 UDP广播地址固定IP地址为:XXX.XXX.XXX.255. 如果向全网段发送广播消息,那么广播地址为:255.255.255. ...

  7. Zabbix自动发现和自动注册

    Zabbix自动发现和自动注册 文章目录 Zabbix自动发现和自动注册 前言 客户端配置指定服务器 自动发现 添加自动发现规则 创建自动发现动作 添加linux主机自动发现动作 添加Windows自 ...

  8. zabbix自动发现并监控GPU

    配置zabbix监控模板(只需要在darshboard上操作一次) 创建监控模板 在配置->模板页面,选择创建模板: 如下填写: 模板名称:自定义,我们命名为gpu discovery 群组:放 ...

  9. python udp 直播_[Python] socket发送UDP广播实现聊天室功能

    原博文 2018-11-24 12:33 − 一.说明 本文主要使用socket.socket发送UDP广播来实现聊天室功能. 重点难点:理解UDP通讯流程.多线程.UDP广播收发等. 测试环境:Wi ...

最新文章

  1. 防火墙产品原理与应用:防火墙接入方式
  2. CentOS Linux 7 配置 nginx 支持 CGI
  3. c++ const 类型检查
  4. java 搭建企业应用框架_java培训一般要学多久
  5. Mathematica修改默认字体
  6. feign和ajax,SpringCloud-feign 声明式服务调用
  7. [Linux] 权限与指令间的关系
  8. Web服务器处理连接请求的四种架构方式
  9. 【ElasticSearch】深入理解 ElasticSearch Doc Values
  10. (xy)+((x^y)1)求(245, 112)结果是多少
  11. Nginx 500错误总结
  12. LeetCode(13)——罗马数字转整数(JavaScript)
  13. L298N模块详细使用教程
  14. 一不做,二不休, 干脆把开局库更换的批处理文件也调试好放出来...
  15. 看完还不会数据库优化,你来找我!
  16. 腾讯互娱2021年游戏客户端开发工程师暑期实习生面试经历
  17. 在vue项目中使用supermap,基于 SuperMap iClient 8C(2017) for JavaScript,底图为天地图
  18. 通过you-get在哔哩哔哩下载视频报错处理
  19. OpenCV开发笔记(三十四):红胖子带你小白式编译Qt+openCV3.4.1+opencv_contrib(全网最简单最强,可读性最高,没有之一)
  20. Mysql IFNULL SUM 结合使用无效的问题

热门文章

  1. 服务器双网卡设置安全_服务器的基础知识
  2. python3 threading.lock_Python3 threading
  3. ubuntu cmake安装_如何在Emacs中得到一个真正的Terminal?vterm安装指南
  4. php 环境优化,Nginx与PHP-fpm环境在大流量下的优化配置
  5. springboot 分页查询参数_精通SpringBoot--分页查询功能的实现
  6. hpux系统启动中被某个服务hang住的解决办法
  7. Maven中引入本地jar包
  8. esayexcel下载问题
  9. 车站广播系统采用计算机,公共广播系统
  10. java concurrent int_Java高级特性系列--Concurrent