java - 跨 TCP 套接字与 ObjectInputStream、Java 和 Lua 客户端联网

标签 java sockets tcp lua stream

我有一个 Java 服务器,它将有两种不同类型的客户端,一个是基于 Java 的控制台,一个是服务器将控制的基于 Lua 的客户端。我让 Lua 客户端来回交谈

out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

我现在正在尝试连接一个基于 Java 的客户端,我想使用

out = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream()));
in = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));

我遇到的问题是理解接受连接的最佳方式,不知道另一端是 Lua 还是 Java 客户端。然后设置适当的流。

我应该在初始连接时使用不同的端口吗?我希望从 ObjectOutputStream 发送一个 BufferedReader 可以读取的字符串。或者,如果它是 PrintWriter 或 ObjectOutputStream,我应该使用较低级别的东西在设置之前查看正在连接的是什么。

深入教程或实际代码的链接会起作用。我无法找到一个或另一个的基本设置之外的资源。

提前致谢。

最佳答案

鉴于您打算提供两种完全不同的服务,因此在不同的端口提供它们是自然而恰当的。为实现这一点,您的服务器将创建和管理两个单独的 ServerSocket,监听不同的端口。一个会提供一种服务;另一个会提供另一个。您可以使用线程或 Selector 或它们的组合来处理两个服务器套接字和所有客户端。

另外,我敦促您在依赖对象流之前仔细考虑。如果您可以在更简单和/或更通用的协议(protocol)之上实现您的服务,那么您将避免 Java 序列化的多重乐趣,并且您还将为使用其他语言编写的客户端敞开大门。

关于java - 跨 TCP 套接字与 ObjectInputStream、Java 和 Lua 客户端联网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32573917/

相关文章:

Python;无法通过 select 控制死套接字

c# - SocketAsyncEventArgs 示例 : How to make the sample works? 中缺少 AsyncUserToken 类

C# .Net 套接字缓冲区理解

java - 在计算日期时依赖毫秒是否安全?

java - 在运行时获取 JVM 可用的内存

java - 自定义 Jersey 参数解码

java - Docx4j 从一个 .docx 导出样式并在另一个 .docx 中使用它

python-3.x - Python Socket 函数错误,找不到 socket.gethostbyname

c - 套接字:如何使用 inet_pton() 屏蔽二进制形式的 ip 地址

php - $_SERVER ['REMOTE_ADDR' ] php var 是否基于用户 TCP/IP?