在套接字和serversocket之间打开多个流



我正在Java中创建一个简单的聊天,并且可以使用。当客户关闭连接时,我只是有问题,因为它继续在线出现。这是因为没有办法知道何时关闭流。

我在Google上进行了搜索,任何解决方案都无法解决我的问题,因此我想每300ms发送boolean,如果我没有收到任何答案或出现错误,我可以关闭连接服务器端。

问题是流中存在冲突,我不知道我是在阅读boolean还是文本,因此有时我的CheckConnection类尝试阅读字符串,而我的SocketHandler类尝试阅读boolean,我收到一个错误。我使用类ObjectInputStreamObjectOutputStream类读取并写入流中。

这是我的第一个服务器应用程序,我对此一无所知,我不知道它是否可以打开多个流或其他解决方案,所以我问您。我该怎么办?

PS :我尝试创建PrintStream并执行checkError()方法,但是即使我明确关闭所有流端客户端,它也会始终返回。谢谢。

我建议您使用文本,因为这更简单地使用。

  • 将任何信息视为心跳。如果获得数据,连接仍然不错。
  • 将心跳视为字符串,然后将其聊天为字符串。这都是一个字符串,因此您不必担心它是什么。
  • 通过尝试从中读取并期望您会在超时期内获得一些东西,从而打开了流。

您可以使用BufferedReader或扫描仪读取文本。您可以用户bufferedwriter编写文本。

在字符串中您可以创建一个更简单的协议。

say [to-whom] [message ...]

对于心跳,您可以拥有

hb

heartbeat

say nobody hi

您可能会添加

之类的命令
login [user] [password]

kthxbye

要解码消息,请查看第一个单词,您知道它的目的,然后读取say的第二个单词,其余的字符串是消息。

要测试协议,您可以将telnet转到端口并直接键入服务器。您甚至不需要写一个客户。

相关内容

  • 没有找到相关文章

最新更新