2017-04-03 198 views
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()); 
    } 

感謝您的幫助樣陌生人!

+0

有你選擇使用'DatagramSocket'而不是'Socket'的原因? – jmhage

+0

說實話我是這樣學習的,我不確定他們之間的區別=/ – joedoee

+0

讓我知道下面的答案是否有幫助,或者您對此有任何疑問。 – jmhage

回答

0

我沒有使用Java一噸的經驗聯網,隨時看一個項目,我最近一直在努力: