私は初めての Java ネットワーキング プログラムを書き始めていますが、簡単に言えば、正しいアプローチをとっていることを確認するのに苦労しています。私たちの教授は、この UDP クライアントに対してテストするためのサーバー プログラムを私たちに提供してくれましたが、いくつかのエラーが発生していて、押しつぶすことができないようです。具体的には、「接続が拒否されました」または「ホストへのルートがありません」という例外のいずれかの IO 例外が発生します。
public class Lab2Client {
/**
* @param args[1] == server name, args[2] == server port, args[3] == myport
*/
public static void main(String[] args) {
//Serverport is set to 10085, our client is 10086
try {
Socket echoSocket = new Socket(args[0],Integer.parseInt(args[2]));
System.out.println("Server connection Completed\n");
DataOutputStream output = new DataOutputStream(echoSocket.getOutputStream());
byte[] toSend = new byte[5];
toSend[0] = 12; toSend[1] = 34;//Code Number
toSend[2] = 15;//GroupId
toSend[3] = 86;toSend[4] = 100;//Port number in Little Endian Order
output.write(toSend);
System.out.println("Sent Request. Waiting for reply...\n");
DataInputStream input = new DataInputStream(echoSocket.getInputStream());
byte[] toRecieve = new byte[]{0,0,0,0,0,0,0,0};
input.read(toRecieve);
checkMessage(toRecieve);
}
catch (UnknownHostException e) {
System.err.println("Servername Incorrect!");
System.exit(1);
}
catch (IOException e){
System.err.println("IO Exception. Exiting...");
System.err.println(e);
System.exit(1);
}
}
また、Java でのメッセージの受信に関する実装についていくつか質問があります。次のいずれかを含むデータグラムを取得します。
a) IPおよびポート番号とともに3つのフォーマットバイト(質問には重要ではありません)
また
b) 3 つのフォーマット バイトと 1 つのポート。
これを行うには DataInputStream を使用するのが正しい方法ですか? 5 または 9 のいずれかの要素を動的に割り当てる代わりに、9 つの要素を持つ配列を使用するのが面倒であることはわかっていますが、今はこれを機能させようとしています。そうは言っても、これに対して誰かが提案する別のアプローチはありますか?