在Mac OS Hight Sierra上创建和绑定套接字 [英] Creating and binding socket on Mac OS Hight Sierra

查看:150
本文介绍了在Mac OS Hight Sierra上创建和绑定套接字的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Hight Sierra的应用程序中创建套接字时,我遇到了严重而奇怪的问题.如果我创建命令行工具,一切正常!我创建套接字,绑定套接字.但是,如果我尝试创建Cocoa App,则无法绑定我的套接字! :(

I have serious and strange problem with creating socket in my application for Hight Sierra. If I create command Line tool, everything is ok! I create socket, bind socket. But If I trying to create Cocoa App, I can't binding my socket! :(

如果我在Cocoa App中使用CFSocket,则

If I use CFSockets in Cocoa App,

    char punchline[] = "MESSAGE from Server!";
    int yes = 1;

    CFSocketContext CTX = {0, punchline, NULL, NULL, NULL};

    CFSocketRef TCPServer = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_STREAM, IPPROTO_TCP, kCFSocketAcceptCallBack, (CFSocketCallBack) &AcceptCallBack, &CTX);


    if (TCPServer == NULL) return;

    setsockopt(CFSocketGetNative(TCPServer), SOL_SOCKET, SO_REUSEADDR, (void *) &yes, sizeof(yes));

    struct sockaddr_in addr;
    memset(&addr, 0, sizeof(addr));
    addr.sin_len = sizeof(addr);
    addr.sin_family = AF_INET;
    addr.sin_port = htons(33000);
    addr.sin_addr.s_addr = htonl(INADDR_ANY);

    NSData *address = [NSData dataWithBytes:&addr length:sizeof(addr)];

    if (CFSocketSetAddress(TCPServer, (CFDataRef) address) != kCFSocketSuccess) {
        CFRelease(TCPServer);
        return;
    }

我收到此消息:

CFSocketSetAddress绑定失败:1

如果我在Cocoa App中使用低级C函数,则这样:

If I use low level C function in Cocoa App, like this:

  sockfd = socket(AF_INET, SOCK_STREAM, 0);

  bzero((char *) &serv_addr, sizeof(serv_addr));
  portno = atoi(argv[1]);

  serv_addr.sin_family = AF_INET;
  serv_addr.sin_addr.s_addr = INADDR_ANY;
  serv_addr.sin_port = htons(portno);

  if (bind(sockfd, (struct sockaddr *) &serv_addr,
             sizeof(serv_addr)) < 0) error("ERROR on binding");

    listen(sockfd,5);
    clilen = sizeof(cli_addr);
    newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);

...它也不起作用,并且在绑定时出现错误,并且在控制台中也显示此消息:

...it's not work too, and I get error on binding and also this message in console:

错误:不允许操作

但是在命令行工具中一切正常!

我需要修复哪种项目设置(可能在info.plist中)? 哪里有麻烦? :(

What kind of project settings (may be in info.plist) I need to fix? Where is a trouble? :(

救救我! :(((

推荐答案

问题是该应用程序已被沙盒化,并且没有网络:传入连接"权利.可以在目标设置的功能"选项卡中的应用程序沙箱"详细信息下的Xcode中添加该权利.

The problem was that the application was sandboxed and did not have the Network: Incoming Connections entitlement. That entitlement can be added in Xcode under the App Sandbox details in the Capabilities tab of the target settings.

这篇关于在Mac OS Hight Sierra上创建和绑定套接字的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆