我在解释大学作业的问题时遇到问题。看来我的解决方案不是一个可以接受的答案。我不是在寻找解决方案,而是主要解释我做错了什么。如何实现聊天客户端
的问题是:
实现透射用户消息发送到多播地址,并接收来自其他客户端上发送到相同的多播地址的其他机器发送的消息的简单的聊天客户端。
我解释这一点的方式是我有一个服务器类与多播地址,然后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();
}
}
}
任何建议表示赞赏。我能想到的是,我需要从客户端将消息发送回服务器?
这是一个非常好的清晰解释,谢谢dddJewelsbbb – ryan1234
很高兴帮忙,@ ryan1234祝你好运:) – dddJewelsbbb