联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp

您当前位置:首页 >> Java编程Java编程

日期:2021-11-20 04:58

IBR-Chat

In this task a simple chat application called IBRC (IBR Chat) is to be developed. Chats can take place in

IBRC in two different ways. First, direct messages can be sent to any other user. Secondly, a user can

join any number of groups to communicate with other users in the same group. IBRC shall use a

client-server model.

In the following, the basic concepts of IBRC are briefly explained before the tasks are presented in detail.

Clients

Each client maintains a connection to exactly one server. All data the client has entered is sent to this

server. The server must then decide on their further processing of the data. Clients are identified by the

name of the corresponding computer (host name). The participants are not identified by their real

names, but by so-called nicknames, which they can freely choose. These nicknames can be up to nine

characters long and must consist of letters or numbers.

Server

Servers essentially fulfill two tasks. On the one hand, they receive all data from the connected clients in

order to forward or process them. The participants (in the form of clients) therefore never communicate

directly with each other, but always via one or more servers. On the other hand, each server must

manage information about the clients in the network. This is necessary, among other things, to

maintain control over all existing users or groups (for a description of the groups see next section). For

example, it must be prevented that two groups or clients get the same name. More details about the

communication process are given in the section Communication

Groups

In a group, users can join together to exchange messages. A user’s messages are sent to all users who

belong to the group. If the very first user joins a group, i.e. if the group does not yet exist, it will be

created. It is important to note that the state of a group can change dynamically, for example when new

users join. This change must be noticed by the corresponding server and the necessary information

must be sent to and synchronized with all other servers in the network.

Groups are identified by short names, e.g. “birthday planning”. These identifiers are max. 32 characters

long and must be unique, i.e. there must not be two groups (or even user) with the same name. The

identifiers are used for all commands to uniquely identify the group. For example, to join the group

“birthday planning”, a user must enter the command JOIN birthday planning.

In addition, there is a more detailed description (topic) of the discussed content for each group. For

example, the topic of the “Birthday Planning” group could be: “How much should the group gift cost?”

The topic can only be set by the user who created the group. However, it is also possible to change it

later. The right to change the topic is not transferable to other users.

Commands

Commands are line-based, i.e. after pressing the Return key the current line is sent to the connected

server. They are used to control communication for users, e.g. to join a group, obtain information

about other users, etc. They are identified by a preceding slash (“/”), and are not case-sensitive. All

commands have the form <command> [<parameter1> [<parameter2>]]. An overview of all IBRC

commands is given in the following table:

Command Description

JOIN Join a group

LEAVE Leave the group

NICK Change own nickname

LIST List all existing groups

GETTOPIC Prints the current topic of the group

SETTOPIC Sets the current topic of the group

MSG Message a single user or group

QUIT Leave IBRC

Communication

In IBRC, two users(clients) are never directly connected to each other, but always via one or more servers.

A client is always connected to exactly one server. The servers have to take care that a message sent in

a group is forwarded to all users of this group. It is important that the client sends the message only

once to the connected server (even if there are other clients connected to the server that belong to the

group). The server decides to which clients and if necessary to which other servers the message has to

be forwarded. Of course, the message is only sent to those servers that need the message in order to

send it to other clients belonging to the corresponding group.

In addition, the servers are responsible for processing the commands that the users can enter. This

requires the storage of data on all existing users, groups, etc. It is important that all servers in the

network synchronize their data, i.e. that all servers always have the same data. It is clear that this

requires communication between the servers. It is up to the participants to decide how to implement

the server communication.

Network Topology

The IBRC network, consisting of clients and servers, should have a tree structure and is therefore cyclefree.

The exact topology can be freely chosen by the participants. However, it must be possible to

integrate at least five servers and 10 clients into the network. The required cycle freedom can be

ensured by the fact that new servers may only connect to an already existing server.

If the server topology is fixed, clients may connect to any server, whereby a client may of course only be

connected to one server. After the first client has been integrated into the network, the topology for the

servers is fixed, i.e. no connections between servers may be created or removed. Inserting new servers

is also no longer allowed. It can be assumed that there will never be more than 10 servers and 20 clients

(i.e. arrays can be used for storage).

Communication

There are two different types of communication in IBRC: one-to-many und one-to-one. Both types

require the use of the MSG command.

• one-to-many: This form of communication corresponds to the group-based form, i.e. the messages

are sent to all users in a group.

• one-to-one: A communication between exactly two users takes place.

Input Validation

before processing requests, the servers have to validate them in the first place. Furthermore, clients

also validate incoming messages from the connected server.

Implementation

Requirements:

In this task a small IBRC network with several servers shall be implemented. The network must be able

to manage at least five servers and 10 clients. The required topology was already described in network

topology.

The servers receive data from the connected clients using the protocol specified above. If messages are

involved, they must be sent to the corresponding client(s). If a client is not directly accessible from the

Server, the message must be “routed”, i.e. sent to the server from which the client can be reached.

Since the topology used is cycle-free, these routing decisions are unambiguous. It must be ensured

that only those servers that really need the message receive it. A “broadcast” of messages from each

server to all others to save routing is not allowed. TCP must be used as the transport protocol.

To control which message a server receives and to whom it forwards it, a simple output must be

implemented on each server, which contains the host names of the sender and the addressee and the

next-hops for each received message.

Necessary Commands

All commands listed in the following description must be implemented. Once again, it should be remembered

that commands must be preceded by a slash when they are entered. Spaces at the beginning,

in the middle (between individual arguments) or at the end of a command should be ignored.

JOIN <name>

With the help of this command a user joins a group. Name isthe short name of the group (e.g. “birthday

planning”). If the group does not yet exist, it will be created.

LEAVE <name>

Hereby the user leaves the group with the given name. If the user is the last member of the group, the

group is deleted.

NICK <name>

Sets the nickname of the user under which the user will appear. These names can be chosen freely, but

no two users may have the same name. Nicknames are up to nine characters long and must consist of

letters or numbers. Incorrect entries are acknowledged with an error message.

LIST

Lists all groups existing in IBRC with their short names.

GETTOPIC <group>

Outputs the detailed description (topic) for the specified group. If the group does not exist, an error

message is displayed.

SETTOPIC <name> <topic>

Sets the topic of the specified group. This command can only be executed by the user who created this

group. Any attempt by other users to execute this command will be acknowledged with a

corresponding error message.

MSG <name> <message>

Sends a message to the user or group specified in <name>. If the specified user or group does not

exist, an error message is displayed.

QUIT

If a user wants to end the client, he can do so with this command. If he still belongs to groups, membership

in groups is automatically terminated.


版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp