【发布时间】:2017-12-10 10:47:03
【问题描述】:
首先了解一下上下文,以使问题更易于理解: 我对 java 网络有相当了解,但是到目前为止我所做的所有网络都是发送命令-> 等待响应-> 重复。最近我在业余时间尝试了一些有点不同的东西。 我想连接到 Mud,我使用标准的泥客户端。但是,我开始思考并决定我是否可以创建一个服务器,然后连接到泥浆(所以,我会使用我的客户端连接到中间服务器,然后它会正确连接到泥浆) .大多数情况下,这只是为了看看我一开始是否可以(我和几个朋友想建立游戏外聊天等),但我遇到了一些问题,现在想解决它们以供将来参考,因为它们看起来很公平很重要。
到目前为止,我设置了一个 ServerSocket,接受一个客户端连接,生成 BufferedReaders/PrintWriters 来保存输入和输出流(在每个新连接的线程内)。然后我在该客户端线程内生成第二个线程以连接到泥,然后不断循环读取行并将它们输出到客户端线程的输出流。客户端线程循环等待命令输入,并对其进行处理。
我不确定这种方法是否合适(正如我所提到的,我从未做过必须同时处理输入和输出的 Socket 编程)。主要问题是输出只是在几行后停止。服务器很好地连接到泥浆,它打印了大约 12 行登录屏幕(如果它很重要,我可以澄清这个数字,双行间距使它有问题)。 我环顾四周,在其他问题中提到需要发送字节序列(telnet 协商?我不熟悉该术语)以避免类似问题,但我找不到有关该问题的具体信息。
我很确定这是我不知道的技术问题,但如果有人能指出一些资源或提供通用解决方案等,那就太好了。
【问题讨论】:
-
一些代码片段将有助于尝试查看您的问题。登录屏幕是否正常超过 12 行,而您的服务器只有 12 行?
-
您应该查找 telnet 协议 (RFC854)。大多数泥浆和泥浆客户端都实现了它(有些比其他更好)。可能是您缺乏谈判导致问题,但正如 patheros 指出的那样,我们需要更多信息。
-
您应该使用
Input/OutputStreams,而不是Readers和Writers。 Telnet 协议包含二进制数据,Reader会破坏它。