Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ NDK上的套接字_C++_Sockets_Android Ndk - Fatal编程技术网

C++ NDK上的套接字

C++ NDK上的套接字,c++,sockets,android-ndk,C++,Sockets,Android Ndk,当我与NDK中的套接字连接时,作为read调用的结果,我总是得到-1(错误) 我在网上查了好几遍,都找不到解决办法。你能帮助我吗? 这是我的密码 void * SocketManager::socketCall(void *ptr) { int socket_, n; SocketManager *manager = (SocketManager*) ptr; while (manager->semaph) ; manager

当我与NDK中的套接字连接时,作为read调用的结果,我总是得到-1(错误)

我在网上查了好几遍,都找不到解决办法。你能帮助我吗? 这是我的密码

void * SocketManager::socketCall(void *ptr) {
        int socket_, n;
        SocketManager *manager = (SocketManager*) ptr;
        while (manager->semaph) ;
        manager->semaph = true;

        bool didConnect = false;
        size_t bufferSize = 32000;
        char buffer[bufferSize];

        const char* value = manager->host.c_str();
        stringstream strValue;
        strValue << value;
        unsigned int host;
        strValue >> host;

        struct sockaddr_in server_address;
        server_address.sin_family = AF_INET;
        server_address.sin_port = htons(10983);
        inet_aton(manager->host.c_str(), &server_address.sin_addr);

        socket_ = socket(AF_INET, SOCK_STREAM, 0);
        if (socket_ < 0) 
            CCLog("ERROR ABRIENDO EL SOCKET");

        n = ::connect(socket_, (struct sockaddr *) &server_address,sizeof(server_address));
        if (n < 0)
            close(socket_);

        manager->onConnect();
        didConnect = true;

        while (!manager->mustDisconnect) {
            n = read(socket_, &buffer, bufferSize);
            if(n<=0)
                break;
            manager->onReadData(buffer, sizeof(buffer));
        }
    if (socket_) {
        close(socket_);
        if (didConnect)
            manager->onDisconnect();
        else
            manager->onTimeout();

    }
    manager->semaph = false;
    manager->mustDisconnect = false;
    return 0;
}
void*SocketManager::socketCall(void*ptr){
int插座,n;
SocketManager*经理=(SocketManager*)ptr;
while(manager->semaph);
manager->semaph=true;
bool-didConnect=false;
大小缓冲大小=32000;
字符缓冲区[bufferSize];
const char*value=manager->host.c_str();
stringstream标准值;
strValue>host;
服务器地址中的结构sockaddr\u;
服务器地址.sin\u family=AF\u INET;
服务器地址.sin\u端口=htons(10983);
inet_aton(manager->host.c_str(),&server_address.sin_addr);
socket=socket(AF\u INET,SOCK\u STREAM,0);
如果(插座<0)
CCLog(“错误ABRIENDO EL SOCKET”);
n=::连接(套接字地址,(结构sockaddr*)和服务器地址,sizeof(服务器地址));
if(n<0)
关闭(插座);
管理器->onConnect();
didConnect=true;
而(!管理器->必须断开连接){
n=读取(套接字、缓冲区和缓冲区大小);
if(非添加数据(缓冲区,sizeof(缓冲区));
}
如果(插座){
关闭(插座);
如果(didConnect)
管理器->onDisconnect();
其他的
管理器->onTimeout();
}
manager->semaph=false;
管理器->mustDisconnect=false;
返回0;
}

on error
errno
已正确设置(使用
strerror(errno)
获取错误的字符串消息)。您可以使用它查找有关所发生错误类型的更多信息。