mirror of
https://github.com/TheGreyDiamond/Enlight.git
synced 2025-12-16 23:10:45 +01:00
First network
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
import socket, time, asyncio, threading
|
||||
|
||||
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) # UDP
|
||||
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
||||
|
||||
# Enable port reusage so we will be able to run multiple clients and servers on single (host, port).
|
||||
# Do not use socket.SO_REUSEADDR except you using linux(kernel<3.9): goto https://stackoverflow.com/questions/14388706/how-do-so-reuseaddr-and-so-reuseport-differ for more information.
|
||||
# For linux hosts all sockets that want to share the same address and port combination must belong to processes that share the same effective user ID!
|
||||
# So, on linux(kernel>=3.9) you have to run multiple servers and clients under one user to share the same (host, port).
|
||||
# Thanks to @stevenreddie
|
||||
# client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
|
||||
|
||||
# Enable broadcasting mode
|
||||
client.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
||||
server.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
||||
|
||||
client.bind(("", 37020))
|
||||
|
||||
|
||||
|
||||
def serverMain():
|
||||
print("Server main started")
|
||||
# Set a timeout so the socket does not block
|
||||
# indefinitely when trying to receive data.
|
||||
server.settimeout(0.2)
|
||||
message = b"your very important message"
|
||||
i = 0
|
||||
while i<=10:
|
||||
server.sendto(message, ("<broadcast>", 37020))
|
||||
print(f"Sent at {time.strftime('%X')}")
|
||||
print("message sent!")
|
||||
time.sleep(1)
|
||||
i+=1
|
||||
print("Server quited")
|
||||
|
||||
def clientMain():
|
||||
print("Client started")
|
||||
while True:
|
||||
# Thanks @seym45 for a fix
|
||||
data, addr = client.recvfrom(1024)
|
||||
print("received message: %s" % data)
|
||||
print(f"Rec at {time.strftime('%X')}")
|
||||
print("Client quited")
|
||||
|
||||
def main():
|
||||
#task1 = asyncio.create_task(serverMain())
|
||||
#task2 = asyncio.create_task(clientMain())
|
||||
thread = []
|
||||
thread.append(threading.Thread(target=clientMain, args=()))
|
||||
thread.append(threading.Thread(target=serverMain, args=()))
|
||||
for th in thread:
|
||||
th.start()
|
||||
|
||||
|
||||
|
||||
#await task1
|
||||
#await task2
|
||||
|
||||
#asyncio.run(main())
|
||||
main()
|
||||
print("Quited")
|
||||
Reference in New Issue
Block a user