嗨,我正在嘗試創建客戶端/服務器聊天程序。 我有三個客戶端和一個服務器,當客戶端發送一些字符串到服務器時,服務器將把這個字符串發送給其他客戶端。 我創建了客戶端向服務器發送數據的部分,但我不知道如何將接收到的數據從客戶端發送到其他客戶端。聊天UDP客戶端/服務器程序
這是我創建的代碼:
對於服務器:
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是客戶端的數量:客戶端1 /客戶機程序...)
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();
}
}
使用UDP,你必須有一個服務器 - >服務器的關係,因爲UDP不是雙向的。當然你可以用[hole punching](http://en.wikipedia.org/wiki/UDP_hole_punching)來破解它,但是你沒有指定爲什麼你不能使用更合適的TCP。 – tjameson 2013-03-15 18:26:37
這裏沒有實際的問題。 – EJP 2016-09-11 23:02:28