【问题标题】:How to implement a chat client如何实现聊天客户端
【发布时间】:2017-05-04 01:51:22
【问题描述】:

我无法解释大学作业的问题。看来我的解决方案不是一个可以接受的答案。我不是在寻找解决方案,主要是对我做错了什么的解释。

问题是:

实现一个简单的聊天客户端,它将用户消息传输到多播地址,并接收从其他机器上的其他客户端发送到同一多播地址的消息。

我对此的解释是,我拥有一个具有多播地址的服务器类,然后是连接或加入服务器组的 n 个客户端类。 然后当客户端连接到服务器类时。服务器向多个客户端发送相同类型的消息,显示在客户端的屏幕上。我问什么?我的多播服务器代码是,

package multicastchatter;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class multicastServer {

    final static String INet_addr = "224.0.0.3";
    final static int PORT = 8888;


    public static void main(String[] args) throws InterruptedException, UnknownHostException {
        InetAddress addr = InetAddress.getByName(INet_addr);

        try(DatagramSocket serverSocket = new DatagramSocket())//open the datagram
        {
                for(int i = 0; i<5; i++)
                {
                    String message = "Sent message number "+i;
                    //create a packet and send
                    DatagramPacket messPack = new DatagramPacket(message.getBytes(),message.getBytes().length, addr, PORT);
                    serverSocket.send(messPack);

                    System.out.println("The server says"+ message);
                    Thread.sleep(500);
                }
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }

    }

}

我的多播客户端是

package multicastchatter;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException;

public class multicastClient {

    final static String INet_addr = "224.0.0.3";
    final static int PORT = 8888;
    //final static int PORT = 8080;

    public static void main(String[] args) throws UnknownHostException {
        InetAddress address = InetAddress.getByName(INet_addr);//get address
        byte[] buf = new byte[256];//create a buffer of bytes

        //create the multicast socket
        try(MulticastSocket clientSocket = new MulticastSocket(PORT))
        {
            clientSocket.joinGroup(address);//join the group
            while(true)
            {//recieve the info
                DatagramPacket messPack = new DatagramPacket(buf, buf.length);
                clientSocket.receive(messPack);

                String message = new String(buf, 0, buf.length);
                System.out.println("Socket recieved message saying" + message+ " by "+ messPack.getAddress());
            }

        }
        catch(IOException e)
        {
            e.printStackTrace();
        }

    }

}

感谢任何建议。我能想到的只是我需要从客户端将消息发送回服务器?

【问题讨论】:

    标签: java multicast


    【解决方案1】:

    既然您的问题是询问您对客户端-服务器架构的概念化是否正确,那么是的。您的老师想要的是一个接受客户端连接并将收到的客户端消息广播给所有客户端的服务器。

    在这种情况下通常会选择多线程服务器方法,因为正在使用许多并发连接,并且每个连接都在等待消息。收到消息后,服务器将获取该消息,在前面附加一个标识符,以便我们知道客户端说的消息,并将该消息仅分发给每个客户端一次。

    对于客户端,它只接受输入,在必要时发送,并始终监听来自服务器的数据包,显示它接收到的任何内容。宝贵的忠告:

    在收到之前不允许客户端显示发送的内容。换句话说,从客户端程序发送输入应该只显示从服务器接收回来时发送的内容。在大多数情况下,在服务器-客户端架构中采用这种做法是一种很好的做法。

    【讨论】:

    • 这个解释非常清楚,谢谢 dddJewelsbbb
    • 很高兴为您提供帮助,@ryan1234 祝您好运 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 2015-10-12
    • 2011-01-04
    • 1970-01-01
    相关资源
    最近更新 更多