Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.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
Android NDK-使用localhost时套接字关闭 我在使用Android NDK的C++代码中使用一些套接字有问题。创建两个套接字,其中一个从另一个中读取。这适用于Android上的网络连接,在另一台机器上有或没有网络连接,但在没有网络连接的Android上没有_Android_C++_Linux_Sockets_Android Ndk - Fatal编程技术网

Android NDK-使用localhost时套接字关闭 我在使用Android NDK的C++代码中使用一些套接字有问题。创建两个套接字,其中一个从另一个中读取。这适用于Android上的网络连接,在另一台机器上有或没有网络连接,但在没有网络连接的Android上没有

Android NDK-使用localhost时套接字关闭 我在使用Android NDK的C++代码中使用一些套接字有问题。创建两个套接字,其中一个从另一个中读取。这适用于Android上的网络连接,在另一台机器上有或没有网络连接,但在没有网络连接的Android上没有,android,c++,linux,sockets,android-ndk,Android,C++,Linux,Sockets,Android Ndk,下面是套接字关闭前的netstat输出。兴趣线是 tcp 0 0 127.0.0.1:32993 127.0.0.1:46810 ESTABLISHED Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:32993 0.0.0.0:* LISTEN t

下面是套接字关闭前的netstat输出。兴趣线是

tcp        0      0 127.0.0.1:32993        127.0.0.1:46810        ESTABLISHED

Proto Recv-Q Send-Q Local Address          Foreign Address        State
tcp        0      0 0.0.0.0:32993          0.0.0.0:*              LISTEN
tcp        0      0 0.0.0.0:45549          0.0.0.0:*              LISTEN
tcp        0      0 127.0.0.1:5037         0.0.0.0:*              LISTEN
tcp        0      0 0.0.0.0:5555           0.0.0.0:*              LISTEN
tcp        0      0 127.0.0.1:46811        127.0.0.1:32993        ESTABLISHED
tcp        0      0 127.0.0.1:32993        127.0.0.1:46811        ESTABLISHED
tcp        0      0 127.0.0.1:46810        127.0.0.1:32993        ESTABLISHED
tcp        0      0 127.0.0.1:32993        127.0.0.1:46810        ESTABLISHED
tcp        0      0 10.0.2.15:5555         10.0.2.2:34217         ESTABLISHED
udp        0      0 10.0.2.15:49667        10.0.2.3:53           
udp        0      0 0.0.0.0:60262          0.0.0.0:*      
然后,我尝试从套接字127.0.0.1:46810(header_length-filled=10)读取10个字节:

但是,读取0个字节。已在套接字上设置TCP_节点延迟。这是读取后的netstat输出

Proto Recv-Q Send-Q Local Address          Foreign Address        State
tcp        0      0 0.0.0.0:32993          0.0.0.0:*              LISTEN
tcp        0      0 127.0.0.1:5037         0.0.0.0:*              LISTEN
tcp        0      0 0.0.0.0:5555           0.0.0.0:*              LISTEN
tcp        0      0 127.0.0.1:46811        127.0.0.1:32993        FIN_WAIT2
tcp        0      1 127.0.0.1:32993        127.0.0.1:46811        CLOSE_WAIT
tcp        0      0 127.0.0.1:46810        127.0.0.1:32993        FIN_WAIT2
tcp        0      0 127.0.0.1:32993        127.0.0.1:46810        CLOSE_WAIT
tcp        0      0 10.0.2.15:5555         10.0.2.2:34217         ESTABLISHED
udp        0      0 0.0.0.0:60262          0.0.0.0:*        

有网络连接时没有问题,使用的地址仍然是127.0.0.1。当没有网络连接时,为什么它无法读取本地主机上的任何字节?

证明这是由另一个问题引起的。在将IP地址解析为字符数组后的一段时间内,正在对该数组调用delete[]。当没有网络连接时,指针被直接重新分配到127.0.0.1,因此程序在删除[]时崩溃。使用将IP复制到阵列中

strcpy(ip, "127.0.0.1");

表示指针仍指向数组,并且调用delete[]时程序不会崩溃。

我怀疑这可能与此问题有关:从TCP套接字读取零字节表示另一端已关闭连接。发布您的代码,否则我们无法帮助您。在进行android ndk开发时,始终打开“logcat”窗口。本机崩溃会导致相当戏剧性的日志输出。@fadden:+1表示“戏剧性”,作为对日志输出的描述。:-)
strcpy(ip, "127.0.0.1");