在socket和serversocket之间打开多个流

时间:2015-05-05 15:13:35

标签: java sockets stream serversocket

我正在用Java创建一个简单的聊天,它可以工作。我刚刚在客户端关闭连接时遇到问题,因为它继续在线显示。这是因为没有办法知道流何时关闭。

我在谷歌搜索过,任何解决方案都没有解决我的问题,所以我想每300毫秒发送一个boolean,如果我没有收到任何答案或者我收到错误,我可以关闭连接服务器端。

问题是流中存在冲突,我不知道我是在阅读boolean还是文本,所以有时我的CheckConnection类会尝试读取字符串而我的SocketHandler课程尝试阅读boolean,但收到错误。 我使用类ObjectInputStreamObjectOutputStream来读取和写入流。

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

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

1 个答案:

答案 0 :(得分:0)

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

  • 将任何邮件视为心跳。如果您获得数据,则连接仍然良好。
  • 将心跳视为字符串并以字符串形式聊天。它都是一个字符串,所以你不必担心它是什么。
  • 通过尝试从中读取并预期您将在超时期限内获得某些内容来检查流是否已打开。

您可以使用BufferedReader或Scanner来读取文本。您可以使用BufferedWriter来编写文本。

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

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

你可以拥有心跳

hb

heartbeat

say nobody hi

您可以添加

等命令
login [user] [password]

kthxbye

要对消息进行解码,请查看第一个单词并知道它的用途,然后读取say的第二个单词,其余字符串就是消息。

要测试协议,您可以telnet到端口并直接输入到服务器的内容。您甚至不需要编写客户端来开始。