队列中的Java套接字连接

队列中的Java套接字连接,java,sockets,stream,Java,Sockets,Stream,我已经设置了客户端/服务器。服务器(Provider.java)将接受2个套接字连接。每个客户在连接后,都会被问及他们想玩什么类型的游戏-井字游戏、国际象棋或连接5。根据答案,套接字连接随后存储在特定的游戏队列中。因此,Tic-Tac-Toe有一个队列,Connect 5有一个队列,等等 队列的实现如下所示: Queue<Socket> qTTT = new LinkedList<Socket>(); Queue<Socket> qC5 = new Linke

我已经设置了客户端/服务器。服务器(
Provider.java
)将接受2个套接字连接。每个客户在连接后,都会被问及他们想玩什么类型的游戏-井字游戏、国际象棋或连接5。根据答案,套接字连接随后存储在特定的游戏队列中。因此,Tic-Tac-Toe有一个队列,Connect 5有一个队列,等等

队列的实现如下所示:

Queue<Socket> qTTT = new LinkedList<Socket>();
Queue<Socket> qC5 = new LinkedList<Socket>();
Queue<Socket> qChess = new LinkedList<Socket>();
上面的代码抛出了某种流损坏错误。以下是我的问题:

首先,当客户端首次连接时,套接字连接与
ObjectInputStream
ObjectOutputStream
相关联。这些流不会随连接一起传递到队列中,因此在上面的代码中,会为连接分配新的流。然后,这些流被传递到线程化游戏中以开始游戏。是否允许我执行此操作(为连接分配新流)?在溪流已经分配给他们之后

其次,我是否正确地存储/删除队列中的套接字连接

谢谢你的帮助

更新:


以下是我得到的错误:

java.io.EOFException
        at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2232)
        at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2698)
        at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:750)
        at java.io.ObjectInputStream.<init>(ObjectInputStream.java:268)
        at Pools.check_pools(Pools.java:34)
        at Provider.start(Provider.java:85)
        at StartServer.main(StartServer.java:16)
java.io.EOFException
位于java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2232)
位于java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2698)
位于java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:750)
位于java.io.ObjectInputStream。(ObjectInputStream.java:268)
检查池(Pools.java:34)
在Provider.start处(Provider.java:85)
位于StartServer.main(StartServer.java:16)

事实证明,我无法为已经分配了一组流的套接字连接分配额外的一组输入/输出流


谢谢大家的帮助

老实说,这个问题看起来像是大学作业的解决方案


提示:首先编写简单的发布者/订阅者。设置一个将向套接字写入hello world的进程,以及第二个将从此套接字读取内容的进程。那就从那里开始吧。我敢打赌你遗漏了一些明显的东西:-)

我猜这个异常与你在文章开头描述的代码有关。首先,我会在程序到达您发布的代码片段之前查看您对套接字所做的操作。

您确定在构建对象IO流之前,所有打开的握手都是从套接字中检索到的吗

例如,如果客户端发送
TTT\n\n
作为游戏请求,而您的代码只读取
TTT\n
,并将另一个
\n
留在流中,则ObjectInputStream将失败


您不会显示从套接字读取用户游戏选择的部分。所以,这只是一个猜测。

我们可以看到一些流损坏错误堆栈跟踪,或者它是商业秘密吗?
java.io.EOFException
        at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2232)
        at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2698)
        at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:750)
        at java.io.ObjectInputStream.<init>(ObjectInputStream.java:268)
        at Pools.check_pools(Pools.java:34)
        at Provider.start(Provider.java:85)
        at StartServer.main(StartServer.java:16)