我正在Java中创建一个简单的聊天,并且可以使用。当客户关闭连接时,我只是有问题,因为它继续在线出现。这是因为没有办法知道何时关闭流。
我在Google上进行了搜索,任何解决方案都无法解决我的问题,因此我想每300ms发送boolean
,如果我没有收到任何答案或出现错误,我可以关闭连接服务器端。
问题是流中存在冲突,我不知道我是在阅读boolean
还是文本,因此有时我的CheckConnection
类尝试阅读字符串,而我的SocketHandler
类尝试阅读boolean
,我收到一个错误。我使用类ObjectInputStream
和ObjectOutputStream
类读取并写入流中。
这是我的第一个服务器应用程序,我对此一无所知,我不知道它是否可以打开多个流或其他解决方案,所以我问您。我该怎么办?
PS :我尝试创建PrintStream
并执行checkError()
方法,但是即使我明确关闭所有流端客户端,它也会始终返回。谢谢。
我建议您使用文本,因为这更简单地使用。
。- 将任何信息视为心跳。如果获得数据,连接仍然不错。
- 将心跳视为字符串,然后将其聊天为字符串。这都是一个字符串,因此您不必担心它是什么。
- 通过尝试从中读取并期望您会在超时期内获得一些东西,从而打开了流。
您可以使用BufferedReader或扫描仪读取文本。您可以用户bufferedwriter编写文本。
在字符串中您可以创建一个更简单的协议。
say [to-whom] [message ...]
对于心跳,您可以拥有
hb
或
heartbeat
或
say nobody hi
您可能会添加
之类的命令login [user] [password]
和
kthxbye
要解码消息,请查看第一个单词,您知道它的目的,然后读取say
的第二个单词,其余的字符串是消息。
要测试协议,您可以将telnet
转到端口并直接键入服务器。您甚至不需要写一个客户。