0

我会尽量详细。我正在尝试在我的应用程序中从我的 iPhone 连接到采集单元。我们使用的是 IP4,而采集单元不支持 DHCP,因此它总是扫描具有特定静态 IP 和端口号的设备。

在我测试设备和我的 iPhone 之间的连接之前,我使用我的桌面创建了一个 adhoc 网络,并在我的 iPhone 上进行了尝试。这是我的代码的一部分。

CFSocketContext CTX = { 0, description, NULL, NULL, NULL };
/* Create the server socket as a TCP IPv4 socket and set a callback */
/* for calls to the socket's lower-level accept() function */
TCPServer = CFSocketCreate(NULL, PF_INET, SOCK_STREAM, IPPROTO_TCP,
                           kCFSocketAcceptCallBack
                           , (CFSocketCallBack)WiFiCallBack, &CTX);
    /* Set the port and address we want to listen on */
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_len = sizeof(addr);
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = htonl(INADDR_ANY);

CFDataRef addressData = CFDataCreate( NULL, (UInt8*)(&addr), sizeof( struct sockaddr_in )      );
CFSocketSetAddress(TCPServer, addressData);

它可以工作,如果我将分配给 iPhone 的 IP 输入到我桌面上的 PC 应用程序,我可以在我的桌面和 iPhone 之间进行数据传输。但是,如果我为 iPhone 设置一个静态 IP 并尝试让 PC 应用程序连接到具有该 IP 的任何设备,它就不起作用。

我的采集单元也是如此。根本不调用回调函数。

我急需帮助,因此欢迎任何形式的帮助。谢谢。

4

1 回答 1

1

对不起,你的帖子不是很清楚。

您是否正在尝试在 iPhone 上建立服务器套接字,并从其他地方连接到它?

由于许多原因,这将是一个问题。

首先是你的ip不会是一样的。当连接到 WIFI 时,您将拥有一个至少在当前网络上可路由的 ip。

但是当连接到 3g(或 lte 等)时,您可能根本无法路由到给定的 ip。

即使您在某个接口上确实有一个完全可路由的 IP 地址并且存在足够长的时间,iOS 也不是为此而设计的。您的应用程序将无法在后台高效运行并侦听服务器套接字。您可以使用持久套接字和 voip 后台模式来模拟这一点。但是,这需要一个单独的服务器组件。

您也可以尝试从 iPhone 进行轮询,这可能会满足您的要求。

于 2012-11-27T18:06:14.153 回答