gpt4 book ai didi

Java 服务器-客户端编程

转载 作者:行者123 更新时间:2023-12-03 12:57:16 25 4
gpt4 key购买 nike

你好
我是java初学者我有一个疑问:

例如,我编写了一个带有服务器和 3 个客户端的游戏,并且由于我不需要线程,因为客户端遵循确定的顺序,并且只有其中一个可以轮流玩,

我可以将服务器置于监听状态并执行如下代码:

 while((i++ < maxConnections) ){

Socket connection = listener.accept();
// code that saves the "connection" to a player Object
//not closing the connection

}

告诉我我是否错了(对接受后的部分感兴趣):

如果每次为每个客户端创建连接时我都没有关闭连接,我可以在每次需要时从流中写入和读取吗? (使用保存在每个玩家对象中的连接变量)
只有当客户端完成与服务器的所有通信时,我才会关闭连接

如果我不关闭它,第二个客户端无法连接?只能用线程吗?

抱歉,我对网络编程真的很困惑

最佳答案

此方法的缺陷在于您必须接收那么多监听器才能继续执行应用程序。此外,您必须存储它们(我可以看到您正在使用 Player 对象执行此操作)。我会做的是,因为游戏太小了,将接受的套接字端点传递给新线程,在那里管理它们。这个系统的问题是你没有发送/接收处理,所以你需要一些东西来管理它而不阻塞服务器的其余部分。您不应该在单独的线程中从套接字进行发送和接收,在同一线程中管理发送和接收,但要聪明一点,不要阻塞。

此外,我建议使用 Socket channel 来简化编程。此实例中的选择器将告诉您套接字何时有数据可供读取或发送缓冲区中有空间可供写入。在使用它注册 channel 后,您在选择器的 select() 方法上循环等待。 Apache MINA更容易,因为它处理套接字并为您提供异步方法来处理,它处理所有这些底层的东西。您可以选择使用这些或等待操作完成,因此非常灵活。

关于Java 服务器-客户端编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4844744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com