1
我想讓我的Android應用程序通過一個小型網絡發送Telnet命令到另一個設備,並且每當我聲明DatagramSocket時,它拋出一個SocketException說:地址族不支持協議。這裏是我的代碼如下:Android應用程序:地址家庭不支持協議
try {
addr = InetAddress.getByName(ipAddress);
sock = new DatagramSocket(); //SocketException created here
//first message - cmd
length = cmd.length();
message = cmd.getBytes();
packet = new DatagramPacket(message, length, addr, portAddr);
sock.send(packet);
//second message - highCMD
length = highCMD.length();
message = highCMD.getBytes();
packet = new DatagramPacket(message, length, addr, portAddr);
sock.send(packet);
sock.close();
} catch (SocketException e) {
AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(v.getContext()).create();
alertDialog.setTitle("Send High CMD Error!");
alertDialog.setMessage("SocketException");
alertDialog.show();
} catch (IOException e){
AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(v.getContext()).create();
alertDialog.setTitle("Send High CMD Error!");
alertDialog.setMessage("IOException");
alertDialog.show();
}
}
可能的解決方案,我認爲,但還沒有做出工作:
- 模擬器需要端口,通過開發機,重定向需要使用的端口?
- 我沒有使用正確版本的IP4/6,這是如何設置的?
- 設備使用TCP協議,也許我使用錯誤的套接字類型?
其他重要信息:
- 我只有在模擬器上運行此
- 開發機發送正確命令從Telnet命令提示符
- 網絡由開發機,路由器和設備。
更新:11年2月9日
我已經改變了這個代碼以下,但我仍然得到一個例外:
try {
addr = InetAddress.getByName(ipAddress);
socketAddress = new InetSocketAddress(addr, portAddr);
sock = new Socket();
sock.connect(socketAddress);
sock.close();
} catch (SocketException e) {
AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(v.getContext()).create();
alertDialog.setTitle("Send High CMD Error!");
alertDialog.setMessage("SocketException" + e.getMessage());
alertDialog.show();
}
從異常消息說「權限被拒絕」。這是否意味着我的設備阻塞了連接?
我已經用你的建議(見上面)更新了代碼,但是當試圖建立連接時,我仍然得到一個SocketException。 – yoshibluehaha 2011-02-09 22:10:53