iPhone TCP连接

3

我希望在 iPhone 和 PC 之间建立 TCP 连接。在 PC 上运行 QTspServer 并且正常工作(已经与其他客户端应用程序进行了测试)。

这是我在 iPhone 上使用的连接方法:

- (IBAction)connectToServer:(id)sender {
    CFReadStreamRef read = NULL;
    CFWriteStreamRef write = NULL;

    NSString *host = @"192.168.1.169";

    CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef)host, 1000, &read, &write);
    CFWriteStreamOpen(write);
    int k = 0;
}

我的电脑上的服务器没有响应。希望能得到帮助。

顺便说一下:服务器只是一个重新实现了 incomingConnection 方法的 QTcpServer。这是服务器端的 main 函数:

int main(int argc, char **argv)
{
QApplication app(argc, argv);
AbstractServer server;
server.listen(QHostAddress::Any, 1000);
QLabel label("Hello server");
label.setFixedSize(400, 400);
label.show();
return app.exec();
}

只是为了明确,您已经检查过服务器上没有防火墙干扰吗? - outis
另外,您是在模拟器上测试还是在真实的iPhone设备上测试? - outis
是的。服务器在Windows防火墙设置中启用。我正在尝试在iPhone和模拟器上进行测试。 - littleGirl_dev
服务器为什么没有反应?当客户端连接到服务器时应该发生什么? - outis
断点应该触发。现在不要做其他事情。 - littleGirl_dev
显示剩余2条评论
2个回答

1

在向服务器发送数据后,连接将建立起来。


0

在调用CFStreamCreatePairWithSocketToHost后,检查write是否为NULL。如果是,则套接字连接失败

-(IBAction)connectToServer:(id)sender {
    CFWriteStreamRef write = NULL;

    NSString *host = @"192.168.1.169";
    int port = 1000;
    CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef)host, port, NULL, &write);
    if (!write) {
        // connection failed.
        NSLog(@"Connection to %@:%d failed.",host,port);
    } else {
        CFWriteStreamOpen(write);
        // keep a reference to the output stream for later use.
        self.output = (NSOutputStream*)write;
        // the function that made the output stream has "Create" in its name, so
        // this method owns the write stream & should release it.
        CFRelease(write);
    }
}

请注意,我将输出流存储在self的属性中。在您的示例代码中,该流未保存在任何位置。您没有释放它,因此当方法退出时它仍然存在,但无法访问它。如果示例-connectToServer:是代表性的,则该错误将阻止您的对象向服务器发送任何内容。

你能解释一下你的答案吗?还有现在的问题是服务器在连接上没有响应。 - littleGirl_dev
它们都不是NULL。这不是连接成功的指示器:http://developer.apple.com/library/ios/#documentation/CoreFoundation/Reference/CFStreamConstants/Reference/reference.html。这里写着:在流打开之前,流不会向指定的主机打开连接。 - littleGirl_dev
套接字不需要连接到主机就会失败。 - outis
我已经尝试按照您的建议进行操作。写入流已创建。但是PC上的服务器没有获得新连接。 - littleGirl_dev
我知道我应该保持流。现在我想建立连接。这就是问题。 - littleGirl_dev
由于流无法访问,因此您无法向其写入数据,因此没有连接。如果写入是该方法的永久特性,则应在connectToServer:中进行写入(如果应将其命名为testConnectionTo:),或者保留对流的引用以便稍后进行写入。 - outis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接