我会尽量详细说明。我想在我的应用程序中从我的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的任何设备,则它不起作用。
与我的收购单位相同。根本没有调用回调函数。
我迫切需要帮助,所以欢迎任何形式的帮助。感谢。
答案 0 :(得分:1)
对不起,但你的帖子不是很清楚。
您是否正在尝试在iPhone上建立服务器套接字,并从其他地方连接到它?
由于许多原因,这将成为问题。
首先,你的ip不会是一样的。当连接到WIFI时,您将拥有至少在当前网络上可路由的IP。
但是当连接到3g(或lte等)时,你可能根本无法路由到ip。
即使你确实在一些存在足够长时间的接口上有完全可路由的IP地址,iOS也不是为此而设计的。您的应用程序将无法在后台高效运行并侦听服务器套接字。你可以使用持久套接字和voip后台模式来模拟这个。但是,这需要单独的服务器组件。
您也可以尝试从iPhone进行投票,这可能会满足您的要求。