您好,我正在尝试创建一个客户端/服务器聊天程序。我有三个客户端和一个服务器,当客户端向服务器发送一些字符串时,服务器会将此字符串发送给其他客户端。我创建了客户端向服务器发送数据的部分,但我不知道如何将接收到的数据从客户端发送到其他客户端。
这是我创建的代码:
对于服务器:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Server {
private static DatagramSocket serverSocket;
public Server() {
// TODO Auto-generated constructor stub
}
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws Exception {
serverSocket = new DatagramSocket(1111);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true)
{
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String s = new String( receivePacket.getData());
System.out.println("Client dit : " + s);
InetAddress IPAddress = receivePacket.getAddress();
boolean found = false;
int port = receivePacket.getPort();
sendData = s.getBytes();
}
}
}
对于客户:( X是客户端的数量:client1 / client2 ......)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class ClientX {
public ClientX() {
// TODO Auto-generated constructor stub
}
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws Exception {
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("localhost");
System.out.println("Connécté au serveur !");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
System.out.print("Ecrire un message: ");
String s = inFromUser.readLine();
sendData = s.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 1111);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String message = new String(receivePacket.getData());
System.out.println(message);
clientSocket.close();
}
}
有点不清楚你的聊天应该如何运作。但最简单的想法就是:
您可以在连接到服务器时将客户端地址保存在服务器中,然后,每次客户端向服务器发送新消息时,都会将该消息发送给其他客户端。
您也可以使用多播。使客户端加入多播地址,并将新消息从服务器发送到该地址。这样您就不需要保存地址,每个客户端都可以“收听”消息。
见http://docs.oracle.com/javase/1.4.2/docs/api/java/net/MulticastSocket.html和http://staff.www.ltu.se/~peppar/java/multicast_example/
• 在 minecraft fabric mod 中向服务器发送命令
• 我如何检查我的服务器是否可以承受 10 个 Flask 客户端?
• 根据客户端请求,Netty 服务器不调用 clientConnected/Register 或任何处理函数,导致套接字描述符泄漏
• 如何在客户端连接到服务器之前录制视频? Opencv C++ [关闭]
• 来自服务器的错误代码未在 nest.js 应用程序中为客户端正确表示
• Next 13 — 客户端和异步服务器组件组合:“Promise<Element>”不是有效的 JSX 元素
• 如何使用tungstenite库从服务器向客户端发送消息
• 两个 TcpClient 连接到同一台服务器(不同端口)是否会导致流媒体问题
• 承诺事件处理程序
• HTTP 1.1 keep alive 客户端在传输静默 2 小时后未收到响应