次のコードは、Java UDPSocket()(組み込みのクラスではない)を使用する例に基づいています。
package BomberButti;
import java.io.*;
import java.net.*;
/**
* BomberServer
* Hier wordt de Server opgezet waarop Clients kunnen connecteren om vervolgens tegen elkaar te spelen
* @author Kaj
*/
public class BomberServer {
public BomberServer() {
waitForPlayers();
}
public static void waitForPlayers() throws Exception {
try {
DatagramSocket serverSocket = new DatagramSocket(9876); //Socket openen
byte[] receiveData = new byte[1024]; //Ontvangen gegevens
byte[] sendData = new byte[1024]; //Te verzenden gegevens
while(true) {
receiveData = new byte[1024];
//Ontvangen data (als die er is) ophalen
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
System.out.println ("Waiting for datagram packet");
serverSocket.receive(receivePacket);
String sentence = new String(receivePacket.getData());
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
System.out.println ("From: " + IPAddress + ":" + port);
System.out.println ("Message: " + sentence);
String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
sendData = new String("Request accepted").getBytes();
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress,
port);
serverSocket.send(sendPacket);
}
}
catch(SocketException ex) {
System.out.println("UDP Port 9876 is occupied.");
System.exit(1);
}
}
public static void main(String args[]) {
BomberServer server = new BomberServer();
}
}
このコードを実行しようとすると、エラー'報告されていない例外例外が発生します。投げられると宣言された者を捕まえる必要があります。
これは、waitForPlayers()メソッドの宣言の背後に配置した「throwsException」に関係していることを理解しています。しかし、これを削除すると、例外部分がスローされ、次の行でエラーが発生します。serverSocket.receive(receivePacket); 'unreporter例外IOException; スローされるように宣言する必要があるので、私が試した両方の方法のどちらも正しい方法ではないと思います。
それで、それが正しいことをどのように行う必要がありますか?
心から、
Luxo