0
我正在嘗試將坦克遊戲放在一起,而且我遇到了網絡部分的問題。我在服務器上做錯了什麼?UDP服務器/遊戲客戶端
這裏是我的服務器代碼:
import java.io.*;
import java.net.*;
class UDPServer extends Thread{
private DatagramSocket socket;
private TanksComponent tank;
private InetAddress IPAddress;
private int port = 9876;
public void UPDServer() throws IOException{
socket = new DatagramSocket(port);
}
public void run(){
while(true){
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
try {
socket.receive(packet);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("RECEIVED: " + packet.getAddress() + " " + packet.getPort() + ": " + new String(packet.getData())) ;
IPAddress = packet.getAddress();
}
}
public void sendData(byte[] data){
DatagramPacket packet = new DatagramPacket(data, data.length, IPAddress, port);
try {
this.socket.send(packet);
} catch (IOException e) {
e.printStackTrace();
}
}
}
這裏是我的客戶端代碼:
import java.io.*;
import java.net.*;
class UDPClient extends Thread{
private InetAddress ipAddress;
private DatagramSocket clientSocket;
private TanksComponent tank;
private byte[] data = new byte[1024];
private int port = 9876;
public UDPClient(TanksComponent tanksComponent) throws SocketException, UnknownHostException{
this.tank = tanksComponent;
this.clientSocket = new DatagramSocket();
this.ipAddress = InetAddress.getLocalHost();
}
public void run(){
DatagramPacket packet = new DatagramPacket(data, data.length);
try {
clientSocket.receive(packet);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String message = new String(packet.getData());
System.out.println("SERVER > " + message);
}
public void sendData(byte[] data){
DatagramPacket packet = new DatagramPacket(data, data.length, ipAddress, port);
try {
clientSocket.send(packet);
} catch (IOException e) {
e.printStackTrace();
}
}
}
我調用這樣的代碼:
public void start() throws UnknownHostException, SocketException {
if(JOptionPane.showConfirmDialog(this, "Server") == 0){
socketServer = new UDPServer();
socketServer.start();
}else{
socketClient = new UDPClient(this);
socketClient.start();
System.out.println("Send");
socketClient.sendData("ping".getBytes());
}
感謝您的幫助樣陌生人!
有你選擇使用'DatagramSocket'而不是'Socket'的原因? – jmhage
說實話我是這樣學習的,我不確定他們之間的區別=/ – joedoee
讓我知道下面的答案是否有幫助,或者您對此有任何疑問。 – jmhage