2012-11-24 39 views
0

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

之前我测试的单位和我的iPhone之间的连接,我用我的台式机和尝试与我的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之间的数据传输,如果我在被分配到iPhone到PC的应用程序我的桌面上的IP饲料。但是,如果我为iPhone设置了一个静态IP并尝试让PC应用程序连接到具有该IP的任何设备,则无法工作。

我的收购单位也一样。回调函数根本不被调用。

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

回答

1

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

你是试图在iPhone上建立一个服务器套接字,并从其他地方连接到它?

由于很多原因,这会出现问题。

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

但是,当连接到3G(或LTE等),你可能会无法路由给所有的IP。

即使你确实有存在足够长一些界面上的完全可路由的IP地址,iOS设备不适合这个。您的应用程序将无法在后台高效运行并侦听服务器套接字。您可以使用持久套接字和voip后台模式来模拟此功能。但是,这需要单独的服务器组件。

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