2012-11-24 38 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的輪詢,這可能會滿足您的要求。