我正在用Java创建一个简单的聊天,它可以工作。我刚刚在客户端关闭连接时遇到问题,因为它继续在线显示。这是因为没有办法知道流何时关闭。
我在谷歌搜索过,任何解决方案都没有解决我的问题,所以我想每300毫秒发送一个boolean
,如果我没有收到任何答案或者我收到错误,我可以关闭连接服务器端。
问题是流中存在冲突,我不知道我是在阅读boolean
还是文本,所以有时我的CheckConnection
类会尝试读取字符串而我的SocketHandler
课程尝试阅读boolean
,但收到错误。
我使用类ObjectInputStream
和ObjectOutputStream
来读取和写入流。
这是我的第一个服务器应用程序,我不太了解它,我不知道是否可以打开多个流或者是否有其他解决方案,所以我问你。我该怎么办?
PS :我尝试创建PrintStream
并执行checkError()
方法,但它始终返回false,即使我明确关闭所有客户端流。谢谢。
答案 0 :(得分:0)
我建议您使用文本,因为这可以更简单地开始使用。
您可以使用BufferedReader或Scanner来读取文本。您可以使用BufferedWriter来编写文本。
在你的字符串中,你可以创建一个更简单的协议。
say [to-whom] [message ...]
你可以拥有心跳
hb
或
heartbeat
或
say nobody hi
您可以添加
等命令login [user] [password]
和
kthxbye
要对消息进行解码,请查看第一个单词并知道它的用途,然后读取say
的第二个单词,其余字符串就是消息。
要测试协议,您可以telnet
到端口并直接输入到服务器的内容。您甚至不需要编写客户端来开始。