• We just launched and are currently in beta. Join us as we build and grow the community.

Network Programming in Java - #8 - Chat System #3 - The Message Packet

aweatherbornestorm

Combo Breaker
A Rep
0
0
0
Rep
0
A Vouches
0
0
0
Vouches
0
Posts
59
Likes
115
Bits
2 MONTHS
2 2 MONTHS OF SERVICE
LEVEL 1 300 XP
Introduction:
This tutorial is the eighth in my Java Network Programming using KryoNet series, or third in creating a chat client and server system, in which we are going to be handling sending and receiving messages.

Previous:
In the previous tutorial we created a client handler for our server to keep track of the connected clients.

The System:
We are going to give the user a GUI to interact with the system - to send messages and see the currently connected members of the chat.
When a client connects, add them to a list.
Send incoming messages to everyone within the client list except the sender - or send them one back saying that it is received, as confirmation.

This Tutorial:
This tutorial we are going to be creating a Packet2Message class which will allow the client and server to send and receive messages.

The Packet:
In your client Java Project, Src Folder, Packets Package create a new Class named "Packet2Message". Again, we are going to extend Packet just like Packet1Connect does then we will create a message String variable...

  1. package

    Packets

    ;

  2. public

    class

    Packet2Message extends

    Packet{
  3. public

    String

    message;
  4. }

Copy the Packet2Message class over to your server Java Project, Src Folder, Packets Package.

We also need to register the class in both the server and client by using the register method of KryoNet...

  1. server.getKryo

    (

    )

    .register

    (

    Packet2Message.class

    )

    ;

and

  1. client.getKryo

    (

    )

    .register

    (

    Packet2Message.class

    )

    ;

-Import the class in both projects-

Client Message Sending:
Now we are going to let the user of the client send a message. For now we are only going to let them enter it through the console by using a scanner, we will implement a GUI later on...

-Under the connecting block, where we send the Packet1Connect packet through TCP of the Client-

First we create a new Scanner to get the console user input, import this from import java.util.Scanner;
  1. Scanner scanner =

    new

    Scanner(

    System

    .in

    )

    ;

Then we create a while loop to run while the Client is connected to the server...

  1. while

    (

    client.isConnected

    (

    )

    )

    {
  2. }

In the loop, we output a line to the console to ask the user for a message to send to the server.

Then we get the next entry to the console (the message from the user to the server) and store it in a new message String variable.

Finally we create a new Packet2Message named messagePacket, set the message variable within the packet to our entered message, and send the packet through the client TCP.

  1. while

    (

    client.isConnected

    (

    )

    )

    {
  2. System

    .out

    .println

    (

    "Enter a message to send to the server:"

    )

    ;
  3. String

    message =

    scanner.nextLine

    (

    )

    ;
  4. Packet2Message messagePacket =

    new

    Packet2Message(

    )

    ;
  5. messagePacket.message

    =

    message;
  6. client.sendTCP

    (

    messagePacket)

    ;
  7. }

Receiving the Message Packet:
Now, on the server, we want to add a Packet2Message instanceof check on the listener...

  1. server.addListener

    (

    new

    Listener(

    )

    {
  2. public

    void

    received(

    Connection

    connection, Object

    object)

    {
  3. if

    (

    object instanceof

    Packet)

    {
  4. if

    (

    object instanceof

    Packet1Connect)

    {
  5. Packet1Connect con =

    (

    Packet1Connect)

    object;
  6. System

    .out

    .println

    (

    "[CONNECTED] "

    +

    con.name

    )

    ;
  7. clientHandler.addClient

    (

    new

    CustomClient(

    con.name

    , connection)

    )

    ;
  8. }

    else

    if

    (

    object instanceof

    Packet2Message)

    {
  9. Packet2Message mes =

    (

    Packet2Message)

    object;
  10. System

    .out

    .println

    (

    "[RECEIVED] ["

    +

    clientHandler.getClient

    (

    connection)

    .getUsername

    (

    )

    +

    "] "

    +

    mes.message

    )

    ;
  11. }
  12. }
  13. }
  14. }

    )

    ;

So the above code checks if the packet is a Packet2Message, if it is it creates a new Packet2Message called mes and sets it to the object received casted to Packet2Message, and outputs the message "[RECEIVED] [" followed by the username of the client we get through our clients list in our clientHandler, followed by another closing bracket and the message value of the Packet2Message object.

 

452,292

323,341

323,350

Top