好吧,我正在重写这个,因为人们太担心代码了,但这并不重要。
我遇到的问题是,我可以在常规 Java 控制台应用程序中从 TCP 套接字进行读取。
当我尝试在 Android 中执行完全相同的操作时,read() 将不会返回。它只是坐在那里,什么都不做,除非我终止 Android 客户端和服务器之间的连接。
最佳答案
您的协议(protocol)是错误的,并导致死锁。
服务器首先向客户端写入一行。然后它等待客户端的线路。
另一方面,客户端首先从服务器读取数据,直到没有更多内容可读取,并且 read()
方法返回 -1。仅当服务器关闭其到客户端的输出流时才会发生这种情况。因此,客户端等待来自服务器的下一个字符,服务器等待来自客户端的第一行。死锁。
一般来说,客户端和服务器代码应该是对称的。如果您在一侧发送一行,则应该在另一侧读取一行。
关于Java InputStream read() - Android 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15076392/