0

我正在尝试打开一个从另一个套接字发送和接收数据的套接字。这个套接字的作用类似于服务器套接字,它监听一个端口然后打开一个套接字,或者接受计算机的连接请求。当我尝试运行该accept()函数时,我得到的错误是No matching function call for accept!我没有问过类似的问题,但他们被问到了自己的方法和函数。这不是我写的函数,它应该可以工作。我计划为此制作一个 gui 界面,以便让它在 Xcode 的目标 c 应用程序中运行。另外,在研究 c 套接字时,我看到一个网站使用了接受函数,就像我正在使用它一样,并且它有效。这是我的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    int sock, newsock, port, clilen;
    char buffer[256];
    struct sockaddr_in serv_addr, cli_addr;
    int n;

    sock = socket(AF_INET, SOCK_STREAM, 0);

    bzero((char *) &serv_addr, sizeof(serv_addr));
    port = 460;
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(port);

    if (bind(sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
        NSLog(@"Failure");
        exit(1);
    }

    listen(sock, 5);
    clilen = sizeof(cli_addr);

    newsock = accept(sock, (struct sockaddr *) &cli_addr, &clilen);

}
4

1 回答 1

2

据我所知,“ No matching function call for [...] ”是一个 C++ 错误,C 和 Obj-C 代码都不会产生这个错误。你的文件叫什么名字?作为一个 Obj-C 文件,它应该有一个扩展名“ .m ”。如果它有扩展名“ .mm ”,它是一个 Objective-C++ 文件,这意味着一个混合了 C++ 和 Obj-C 的文件,这里的事情变得更加复杂。如果您不打算创建 Obj-C++ 文件,但文件名为“ .mm ”,请确保更改扩展名。此外,您可以在 Xcode 中选择文件的类型,覆盖 Xcode 的自动选择(取决于其扩展名),确保您没有将其覆盖为 Obj-C++。

于 2013-07-31T13:55:38.730 回答