C++ NDK上的套接字
当我与NDK中的套接字连接时,作为read调用的结果,我总是得到-1(错误) 我在网上查了好几遍,都找不到解决办法。你能帮助我吗? 这是我的密码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
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 errorerrno
已正确设置(使用strerror(errno)
获取错误的字符串消息)。您可以使用它查找有关所发生错误类型的更多信息。