我开始编写我的第一个 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) 3个格式化字节(对问题不重要)以及IP和端口号
或者
b) 3 个格式化字节和一个端口。
使用 DataInputStream 是正确的方法吗?我知道使用具有 9 个元素的数组是惰性的,而不是动态分配一个 5 或 9 的数组,但现在我只是想让它工作。话虽这么说,有没有人会为此提出不同的方法?