Created
July 11, 2020 17:49
-
-
Save benmechen/9f4c1ee1f6dfb21618e5c4e84ed67eaf to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import socket | |
import datetime | |
from zeroconf import ServiceInfo, Zeroconf | |
HOST = '' # Open server up on local network | |
PORT = 1024 # Port to listen on (non-privileged ports are > 1023) | |
address = "" | |
print("#############################") | |
print("#### DISCOVERABLE SERVER ####") | |
print("#############################\n") | |
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | |
serverSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) | |
serverSocket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) | |
serverSocket.bind((HOST, PORT)) | |
print(" > Server started on " + socket.gethostname() + ":" + str(PORT)) | |
zeroconf = Zeroconf() | |
fqdn = socket.gethostname() | |
ip_addr = socket.gethostbyname(fqdn) | |
hostname = fqdn.split('.')[0] | |
desc = {'service': 'My Service', 'version': '1.0.0'} | |
info = ServiceInfo('_discoverable._udp.local.', | |
hostname + ' My Server._discoverable._udp.local.', | |
addresses=[socket.inet_aton(ip_addr)], port=PORT, properties=desc) | |
try: | |
zeroconf.register_service(info) | |
print(" > Discoverable service " + str(desc) + " registered:\n" + str(info)) | |
while True: | |
message, address = serverSocket.recvfrom(1024) | |
string = message.decode('utf-8') | |
print(" > Received: " + message.decode('utf-8') + " from " + str(address)) | |
serverSocket.sendto("astv_ack".encode('utf-8'), address) | |
if string == "astv_discover": | |
returnMessage = "astv_shake:" + ip_addr | |
print(" > Discover call from client: " + str(address)) | |
print(" > Sending handshake: " + returnMessage + ", to address: " + str(address)) | |
serverSocket.sendto(returnMessage.encode('utf-8'), address) | |
print(" > [" + str(datetime.datetime.now()) + "] New client connected <" + address[0] + ">") | |
elif string == "astv_disconnect": | |
break | |
finally: | |
print("\n > Shutting down server [" + str(datetime.datetime.now()) + "]") | |
if address != "": | |
serverSocket.sendto("astv_disconnect".encode('utf-8'), address) | |
zeroconf.unregister_service(info) | |
zeroconf.close() | |
serverSocket.close() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment