Android应用程序:协议不支持的地址系列

时间:2011-02-08 22:25:57

标签: sockets android-emulator

我正在尝试让我的Android应用程序通过一个小型网络将Telnet命令发送到另一台设备,每当我声明DatagramSocket时,它都会抛出一个SocketException:地址系列不受协议支持。以下是我的代码:

    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();
    }
}

我考虑过但可能没有成功的可能解决方案:

  1. 仿真器需要端口重定向通过开发机器,哪些端口可以使用?
  2. 我没有使用正确版本的IP4 / 6,这是怎么设置的?
  3. 设备使用TCP协议,也许我使用了错误的套接字类型?
  4. 其他重要信息:

    1. 我只在模拟器上运行
    2. 开发机器从命令提示符
    3. 正确发送了telnet命令
    4. 网络由开发机器,路由器和设备组成。
    5. 更新时间:2/9/11

      我已将此代码更改为以下内容,但我仍然遇到异常:

          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();
          }
      

      来自异常的消息显示“权限被拒绝”。这是否意味着我的设备阻止套接字连接?

1 个答案:

答案 0 :(得分:3)

你用错误的方式编码了这个。 Telnet使用TCP,它使用流(面向连接)套接字,而不是UDP使用的数据报套接字。

搜索tcp示例。