2014-01-26 132 views
0

我需要为Java上的客户端 - 服务器聊天创建协议。 我使用xml来编码它们之间的消息,但我无法决定如何将解码后的数据返回给服务器。Java客户端 - 服务器聊天协议设计

第一次,我创建了很多对象implements IAction(例如Auth对象代表一个数据包,关于聊天中的新用户),这取决于它们的内容。 所以,当服务器接收到一个插座,它调用我public IAction decode(String s)然后,服务器应该确定哪些对象是:

if (myIAction instanceof Auth) { 
    server.doMagicAuth((Auth) myIAction); 
} 

,但它一直在寻找丑到我,因为类型转换和许多国际选举制度基金会

另一种方法是创建一个共同的对象,被称为Packet,它可以包含intValue,floatValue,stringValue等。而且它有一个标志,它谈论它是什么样的数据包。但这是碰撞最糟糕的主意。例如,如何发送2个int值给它这个包?例如密码和users_id?

而最新的想法是观察服务器。 服务器应该有很多重载public void action(IAction a)方法(action(Auth a)等),协议应该通知服务器,取决于它是什么类型的数据包。

而我不能决定,使用什么方法。也许你有一些完全不同的想法?

回答

1

聊天客户端 - 服务器应用程序通常不会发送/接收2个整数或3个浮点数或类似的东西,但只是字符串。 现在我可能会发送JSON对象序列化为字符串或只是普通的字符串。

如果使用XML是你需要定义一些XML格式
(可能通过一些XSD尽管这不是强制性的,你的情况)
并坚持该格式坚定的要求。例如:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<message text="Hello"/> 

当这从任何客户端发送的,你把它在服务器端,
得到text值和从服务器发送到所有连接的客户端。
这就是他们想要的全部,我相信。

+0

XML是我的实验室=的限制( 而问题是另一个问题:如何将解码后的数据从协议 – ovnia

+0

的解码数据传递到服务器只不过是一个字符串,只要将它发送到你的服务器,你喜欢的任何方式。 。调用一个方法,发送一个事件,几乎任何东西都可以在这里工作。 –

+0

,再次,我不问如何用数据包表示我的数据)它是协议的工作。我无法决定如何将解码后的数据呈现给服务器。例如'Protocol'对一个xml字符串进行解码,并且明白它是一个包,并且有一个从user123到user21的新消息,所以我需要服务器向'user21'发送消息。还有一个问题:“如何要求服务器做到这一点?”其实是我想知道的) – ovnia