Gistrec

Python UDP Sender

Oct 18th, 2018
307
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.65 KB | None | 0 0
  1. /**
  2.  * Simple UDP sender
  3.  */
  4. import socket
  5.  
  6. client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
  7. client.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
  8. client.bind(("", 37020))
  9. while True:
  10.     data, addr = sock.recvfrom(1024)
  11.     print("received message: %s"%data)
  12.  
  13.  
  14.  
  15. /**
  16.  * Updated UDP sender
  17.  * Added headers
  18.  */
  19.  
  20. import socket
  21.  
  22. # Пакет сообщает о новом файле
  23. # Структура пакета:
  24. #     Magic    (4 байта)
  25. #     FileSize (4 байта) - размер файла в блоках  
  26. MAGIC_NEW = b'\xa1\xdc\xda\xae'
  27.  
  28. # Пакет с данными о файле
  29. # Структура пакета:
  30. #     Magic   (4 байта)
  31. #     Number  (4 байта) - номер пакета от 0 до FileSize
  32. MAGIC_TRANSFER = b'\xa1\xdc\xda\xad'
  33.  
  34. # Пакет, который приходит после передачи файла
  35. # Структура пакета:
  36. #     Magic   (4 байта)
  37. MAGIC_FINISH = b'\xa1\xdc\xda\xad'
  38.  
  39. # Создание сокета
  40. client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
  41. client.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
  42. client.bind(("", 37021))
  43.  
  44. fileBlocks = []
  45. countBlocks = 0
  46.  
  47. waitNewFile = True
  48. while waitNewFile:
  49.     data, addr = client.recvfrom(1024)
  50.     magic = data[:4]
  51.     data = data[4:]
  52.  
  53.     countBlocks = int.from_bytes(data[:4], 'big')
  54.  
  55.     if (magic == MAGIC_NEW):
  56.         needWaitFile = false
  57.        
  58.  
  59. print("New file!")
  60. print("Size: ", countBlocks, " blocks!")
  61.  
  62.  
  63. while(len(fileBlocks) != countBlocks):
  64.     data, addr = client.recvfrom(1024)
  65.     magic = data[:4]
  66.  
  67.     if (magic == MAGIC_TRANSFER):
  68.         data = data[4:]
  69.         number = int.from_bytes(data[:4], 'big')
  70.        
  71.         data = data[4:]
  72.         length = int.from_bytes(data[:4], 'big')
  73.        
  74.         data = data[4:]
  75.         data = data[:length].decode()
  76.        
  77.         file[i] = data
  78.  
  79.     if (magic == MAGIC_FINISH):
  80.         print("Server off transmisiion")
Advertisement
Comments
  • User was banned
Add Comment
Please, Sign In to add comment