0

直到最近,以下代码在我的项目中完美运行。但是从几天前开始,它不再起作用了。我可以用NSLog语句printf替换语句,替换其他 Obj-C 样式语句并在终端中使用 g++ 编译它工作得很好。

它应该只连接到 Raspberry Pi 上的一个非常原始的服务器,发送一个字符“R”,然后读回一个 2 字节整数。当我几个月前在 XCode 中编译或运行它时,它起作用了。当我现在使用 g++ 在终端中编译时,它可以工作。但是,当我现在在 XCode 中运行时,它无法打开套接字并报告setDAC: connection failed.

我怕我会发疯。Apple 是否隐藏了一些我需要在 XCode 9.4.1 中打开网络访问的新设置?有什么建议吗?

XCode中以前的功能代码:

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include "stdio.h"

.
.
.

float readDAC(uint8_t ch){
if(!isConnected){
    const char *servIP = [[txtIPAddress stringValue] UTF8String];

    in_port_t servPort = 5001;

    int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(sock < 0){
        NSLog(@"setDAC: Socket creation failed\n");
        ok = false;
    }
    struct sockaddr_in servAddr;

    memset(&servAddr, 0, sizeof(servAddr));
    servAddr.sin_family = AF_INET;
    int rtnVal = inet_pton(AF_INET, servIP, &servAddr.sin_addr.s_addr);
    if(ok){
        if(rtnVal == 0){
            NSLog(@"setDAC: inet_pton() failed: invalid address string\n");
            ok = false;
        }
        else if (rtnVal < 0){
            NSLog(@"setDAC: inet_pton() failed\n");
            ok = false;
        }
        servAddr.sin_port = htons(servPort);
    }
    if(ok) if(connect(sock, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0){
        NSLog(@"setDAC: connection failed\n");
        ok = false;
    }

    datastream = fdopen(sock, "r+");
    isConnected = true;
}
//send 'R' to read
//send 'W' to write
char writeChar = 'R';

if([AD5754 intValue]==1){
    uint8_t writeChannel;
    int16_t setVal;

    float theVal;

    uint8_t nDAC = 0;
    if(ch>3) nDAC = 1;
    ch = ch%4;
    ch = 16*nDAC+ch;
    writeChannel = ch;

    fwrite(&writeChar, sizeof(writeChar), 1, datastream);
    fwrite(&writeChannel, sizeof(writeChannel), 1, datastream);
    fread(&setVal, sizeof(setVal), 1, datastream);

    int16_t theSetVal;
    theSetVal = ntohs(setVal);

    theVal = (float)theSetVal/100;

    NSLog(@"Read channel %i: %0.2f", ch, theVal);
    fflush(datastream);
    fclose(datastream);

    return theVal;

}

4

1 回答 1

0

我向 Apple 支付了 99 美元的年费来加入开发者计划,现在网络编码又可以工作了。对苹果没有印象,但还可以。

如果记录在案或发出通知,我不介意支付恢复功能的费用。但是我挣扎了几天,然后绝望地尝试随机地向这个问题扔钱。

于 2018-07-27T07:43:15.050 回答