0

好的,我正在重写这个,因为人们太担心代码了,这没关系。

我遇到的问题是,我可以在常规 Java 控制台应用程序中从 TCP 套接字读取。

当我在 Android 中尝试完全相同的事情时, read() 不会返回。除非我终止 Android 客户端和服务器之间的连接,否则它就坐在那里什么都不做。

4

2 回答 2

3

你的协议是错误的,并导致死锁。

服务器首先向客户端写入一行。然后它等待来自客户端的一行。

另一方面,客户端首先从服务器读取,直到没有更多内容可读取,并且该read()方法返回 -1。这只会在服务器关闭其对客户端的输出流时发生。所以客户端等待服务器的下一个字符,服务器等待客户端的第一行。僵局。

一般来说,客户端和服务器代码应该是对称的。如果您在一侧发送一行,则应该在另一侧阅读一行。

于 2013-02-25T21:18:24.880 回答
0

我不知道它是什么,但是一旦我使用了 readLine() 它就起作用了。也许我之前错过了一些我现在注意到的东西,但我让它发挥了作用。

对于将来遇到此问题的任何人,也许在您的服务器发送文本时避免 read() ?我不确定。

但是,是的,对不起 JB,我的代码工作正常。它按设计无限循环,我只是在运行一个虚拟程序来进行测试。

于 2013-02-25T23:34:13.713 回答