2011-02-08 18 views
1

小さなネットワークを介してTelnetコマンドを他のデバイスに送信しようとしていて、DatagramSocketを宣言するとSocketExceptionというメッセージがスローされます:アドレスファミリはプロトコル。ここに私のコードは以下の通りです:Android App:アドレスファミリがプロトコルでサポートされていない

  1. エミュレータがどのポートを使用するポートは、開発マシンを介して、リダイレクト必要があります:私はと考えましたが、作業を行っていない

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

    可能な解決策?

  2. 私はIP4/6の正しいバージョンを使用していませんが、どのように設定されていますか?
  3. デバイスがTCPプロトコルを使用していますが、間違ったソケットタイプを使用していますか?

その他の重要な情報:

  1. 私だけ
  2. ネットワークは、開発マシン、ルータ、およびデバイスで構成をコマンドプロンプトからエミュレータ
  3. 開発マシンに正しく送信されたtelnetコマンドでこれを実行しました。

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

例外からのメッセージ「許可が拒否されました。これは、デバイスがソケットの接続をブロックしていることを意味しますか?

答えて

3

あなたはこれを間違った方法でコーディングしました。 Telnetは、UDPによって使用されるデータグラムソケットではなく、ストリーム(接続指向)ソケットを使用するTCPを使用します。

tcpの例を検索します。

+0

あなたの提案(上記参照)でコードを更新しましたが、接続が確立しようとしたときにまだSocketExceptionが発生します。 – yoshibluehaha

+2

あなたのマニフェストにインターネットアクセス権がありますか? –

+0

私はしませんでした!アプリケーションエンベロープの下のAndroidManifest.xmlのアプリケーションパケットの下にこれを追加した後、それは機能しました! ありがとう@ChrisStratton! – yoshibluehaha

関連する問題