使用PC和iPhone之间的UDP广播调试网络发现

时间:2017-05-29 00:51:23

标签: python swift sockets networking udp

这是设置。我正在尝试将信息从PC发送到移动设备。目前,该设置正在Mac和iPhone之间执行。

我正在使用Python发送UDP广播,以便移动设备可以检测到PC连接到同一网络并可用于发送数据。

这是PC上使用的Python代码:

import socket
import os
from time import sleep

IP = os.popen('ifconfig en0 | grep "inet\ addr" | cut -d: -f2 | cut -d" " -f1').read()
PORT = 4801
KEY = "IDKEY"

# Create socket.
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# Bind socket.
sock.bind(('', 0))
# Configure socket.
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

# Server Loop.
while True:
    data = KEY+IP
    sock.sendto(data.encode(), ('<broadcast>', PORT))
    print("Sent broadcast")
    sleep(5)

以下是移动设备上使用的Swift代码(我正在使用SwiftSocket library):

let server = UDPServer(address: "", port: 4801)
var connected = false
repeat {
    let data = self.server.recv(1024)            
    if let key = String(data: Data(bytes: data.0!), encoding: .utf8) {
        if (key == self.keyTextField.text) {
            print("Auth complete")
            connected = true
        } else {
            print("Wrong key")
        }
    }
    print(data)
} while connected == false

在模拟器上,这工作得很好。但是,独立的,当它们都连接到同一个WiFi站时,这根本不起作用。移动设备卡在无限循环中,因为它从不接收任何数据。

我不得不承认,我对这种网络很陌生,所以我的方法很有可能从根本上不正确。我想知道这里有什么问题,也许,实现这一目标的更好方法是

理想情况下,执行链如下:

  1. PC在网络上广播,表示它处于活动状态。
  2. 移动设备连接到网络并检查设备广播消息,并查看是否是正确的消息。
  3. 移动设备获取IP。
  4. 通过TCP开始通信,现在知道两者的IP。

0 个答案:

没有答案