Java 在socket和serversocket之间打开多个流
我正在用Java创建一个简单的聊天,它可以正常工作。我只是在客户端关闭连接时遇到了一个问题,因为它会继续在线显示。这是因为无法知道流何时关闭 我在谷歌上搜索,但任何解决方案都没有解决我的问题,所以我想每隔300毫秒发送一个Java 在socket和serversocket之间打开多个流,java,sockets,stream,serversocket,Java,Sockets,Stream,Serversocket,我正在用Java创建一个简单的聊天,它可以正常工作。我只是在客户端关闭连接时遇到了一个问题,因为它会继续在线显示。这是因为无法知道流何时关闭 我在谷歌上搜索,但任何解决方案都没有解决我的问题,所以我想每隔300毫秒发送一个布尔值,如果没有收到任何答案或出现错误,我可以关闭连接服务器端 问题是流中存在冲突,我不知道我是在读取布尔值还是文本,因此有时我的CheckConnection类尝试读取字符串,而我的SocketHandler类尝试读取布尔值,我收到一个错误。 我使用类ObjectInputS
布尔值
,如果没有收到任何答案或出现错误,我可以关闭连接服务器端
问题是流中存在冲突,我不知道我是在读取布尔值还是文本,因此有时我的CheckConnection
类尝试读取字符串,而我的SocketHandler
类尝试读取布尔值,我收到一个错误。
我使用类ObjectInputStream
和ObjectOutputStream
读取和写入流
这是我的第一个服务器应用程序,我对它不太了解,我不知道是否可以打开多个流,或者是否有其他解决方案,所以我问你。我能做什么
PS:我试图创建一个PrintStream
并执行checkError()
方法,但它总是返回false,即使我显式关闭了客户端的所有流。谢谢。我建议您使用文本,因为它一开始就更简单
- 将任何消息视为心跳。如果获得数据,连接仍然良好
- 将心跳视为字符串,将聊天视为字符串。这都是一个字符串,所以你不必担心它是什么
- 检查流是否打开,方法是尝试从中读取数据,并期望在超时时间内获得某些内容
您可以使用BufferedReader或Scanner读取文本。您可以使用BufferedWriter编写文本
在您的字符串中,您可以创建这样一个更简单的协议
say [to-whom] [message ...]
为了你的心跳
hb
或
或
您可以添加如下命令
login [user] [password]
及
要解码消息,请查看第一个单词,您知道它的用途,然后阅读的第二个单词,比如说,字符串的其余部分就是消息
要测试协议,您可以将telnet
发送到端口,并直接向服务器键入内容。您甚至不需要首先编写客户端。展示一些代码可能是个好主意,我不知道您是如何做到这一点的
say nobody hi
login [user] [password]
kthxbye