好的,我正在重写这个,因为人们太担心代码了,这没关系。
我遇到的问题是,我可以在常规 Java 控制台应用程序中从 TCP 套接字读取。
当我在 Android 中尝试完全相同的事情时, read() 不会返回。除非我终止 Android 客户端和服务器之间的连接,否则它就坐在那里什么都不做。
好的,我正在重写这个,因为人们太担心代码了,这没关系。
我遇到的问题是,我可以在常规 Java 控制台应用程序中从 TCP 套接字读取。
当我在 Android 中尝试完全相同的事情时, read() 不会返回。除非我终止 Android 客户端和服务器之间的连接,否则它就坐在那里什么都不做。
你的协议是错误的,并导致死锁。
服务器首先向客户端写入一行。然后它等待来自客户端的一行。
另一方面,客户端首先从服务器读取,直到没有更多内容可读取,并且该read()
方法返回 -1。这只会在服务器关闭其对客户端的输出流时发生。所以客户端等待服务器的下一个字符,服务器等待客户端的第一行。僵局。
一般来说,客户端和服务器代码应该是对称的。如果您在一侧发送一行,则应该在另一侧阅读一行。
我不知道它是什么,但是一旦我使用了 readLine() 它就起作用了。也许我之前错过了一些我现在注意到的东西,但我让它发挥了作用。
对于将来遇到此问题的任何人,也许在您的服务器发送文本时避免 read() ?我不确定。
但是,是的,对不起 JB,我的代码工作正常。它按设计无限循环,我只是在运行一个虚拟程序来进行测试。