gpt4 book ai didi

java - 如何实现一个聊天客户端

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:14 25 4
gpt4 key购买 nike

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

问题是:

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

我对此的解释方式是,我拥有一个具有多播地址的服务器类,然后是连接或加入该服务器组的 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 - 如何实现一个聊天客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43766667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com