Java 使用套接字从mud接收数据-telnet协商?

Java 使用套接字从mud接收数据-telnet协商?,java,mud,Java,Mud,为了让问题更容易理解,请先了解一下上下文: 我对java网络有相当的了解,但到目前为止,我所做的所有网络工作都是发送命令->等待响应->重复。最近我在业余时间尝试了一些有点不同的东西。 我想连接到Mud,我使用标准的Mud客户端。然而,我开始思考并决定是否可以创建一个服务器,然后连接到mud(因此,我将使用我的客户端连接到中间服务器,然后再连接到mud)。大多数情况下,这只是为了看看我一开始是否可以(一些朋友和我想在游戏之外建立聊天室等),但我遇到了一些问题,现在想解决它们以供将来参考,因为它们

为了让问题更容易理解,请先了解一下上下文: 我对java网络有相当的了解,但到目前为止,我所做的所有网络工作都是发送命令->等待响应->重复。最近我在业余时间尝试了一些有点不同的东西。 我想连接到Mud,我使用标准的Mud客户端。然而,我开始思考并决定是否可以创建一个服务器,然后连接到mud(因此,我将使用我的客户端连接到中间服务器,然后再连接到mud)。大多数情况下,这只是为了看看我一开始是否可以(一些朋友和我想在游戏之外建立聊天室等),但我遇到了一些问题,现在想解决它们以供将来参考,因为它们似乎相当重要

到目前为止,我设置了一个ServerSocket,接受一个客户端连接,生成BufferedReaders/PrintWriter来保存输入和输出流(在每个新连接的线程内)。然后,我在该客户机线程内生成第二个线程以连接到mud,然后mud不断循环读取行并将它们输出到客户机线程的输出流。客户端线程循环等待命令输入,并对其进行处理

我不确定这种方法是否合适(正如我提到的,我从未做过输入和输出必须同时处理的套接字编程)。不过,主要问题是输出在几行之后就停止了。服务器连接到mud fine,并打印大约12行的登录屏幕(如果这个数字很重要,而且是双行间距,这让人怀疑的话,我可以澄清这个数字)。 我环顾四周,在其他问题中提到需要发送字节序列(telnet negotiation?我不熟悉这个术语)以避免类似问题,但我找不到关于这个问题的更多具体信息


我敢肯定这是一个我不知道的技术问题,但如果有人能给我提供一些资源或提供一个通用解决方案之类的,那就太好了。

如果我理解正确,您正在使用一个标准的MUD客户机通过您编写的中介/代理服务器连接到MUD

同样,为了确保我在同一页上:每个到代理的连接都会产生两个线程:一个线程收集客户端发送的字节并将它们转发给MUD,另一个线程收集MUD发送的字节并将它们转发给客户端

您的问题: 您的客户端只能从MUD中看到有限的字节数

理论: 你的Telnet谈判理论很不错。您需要在客户端和MUD之间发送不受干扰的八位字节,但是PrintWriter设计为只发送句柄编码的文本流。这可能会扰乱一些通过代理来回传输的非ASCII字节


由于我最近一直在做类似的事情,我还想排除发生缓冲区溢出的可能性。如果您的每个代理线程都处于一个紧密的读写循环中,这是不可能的,但我看到的情况与您完全相同,因为我定期轮询并写入太小而无法处理负载的缓冲区。

一些代码剪贴可能有助于查看您的问题。登录屏幕是否正常超过12行,而您的服务器仅获得12行?您应该查看telnet协议(RFC854)。大多数mud和mud客户机都实现了它(有些比其他更好)。可能是您缺乏协商导致了问题,但正如patheros指出的那样,我们需要更多信息。您应该使用
输入/输出流
,而不是
读卡器
写卡器
。Telnet协议包含二进制数据,而
读取器将损坏它。