2012-03-16 21 views
1

以下は私のコードです。エディタ:Eclipse、プラットフォーム:Windows。tcpソケットを使ったアンドロイドエミュレータの接続

2つのアンドロイドエミュレータがTCPソケットを介して接続するチャットアプリケーションです。

UIは、送信ボタン、テキスト表示、テキストボックスで構成されています。

問題:テキストを入力してsendを送信すると、アプリケーションがクラッシュします。

サーバーポートは8000です。 私のリダイレクトはredirです。したがって、tcp:8081:8000とredir:tcp:8082:8000を追加します。

私のコードで何が間違っていますか。私が変更する必要があるものを提案してください。あなたのlogcatから

public class HelloandroidActivity extends Activity 
{ 
/** Called when the activity is first created. */ 
public int serverport=8000; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final EditText nameField = (EditText) findViewById(R.id.editText1);    
    final Button button2 = (Button) findViewById(R.id.button1); 
    Integer severport=8000; 
    new Server().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,severport); 
    button2.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
      final String name = nameField.getText().toString(); 
      final TextView tv = (TextView) findViewById(R.id.textView1); 
      //tv.setText(name); 

      String s=null; 

     new Client().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,s); 
    } 
      });// end onclicklis 

    }//end oncreate 



class Server extends AsyncTask <Integer, String, String> 
{ 
public InetAddress byIpAsName ; 
int r=0; 
@Override 
protected String doInBackground(Integer... serverport) { 
    //i[0]=serverport; 
    Integer[] sp=serverport; 
    BufferedReader in=null; 
    ServerSocket s=null; 
    r=sp[0]; 
    String cIn=""; 
    try { 
     //byIpAsName = InetAddress.getByName("10.2.2.15"); 
     s=new ServerSocket(r); 
    while(true) 
    { 
     Socket client = s.accept(); 
     in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
     String line=in.readLine(); 
     cIn=null; 
     while(line!=null){cIn=cIn.concat(line);} 

    }//while  

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     s.close(); 
     in.close(); 
     } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return cIn; 


}//end inBackground 
//@SuppressWarnings("null") 
protected void onPostExecute(String... cIn) 
{ 

    }//onpost execute 

    }//server class 
    public class Client extends AsyncTask<String, String, String> 
    { 
    PrintWriter out = null; 
    BufferedReader in=null; 
    String sIn=null; 
    //Server s1=new Server(); 
    //int q=s1.r; 
    TelephonyManager tel = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
    String portStr = tel.getLine1Number().substring(tel.getLine1Number().length() - 4); 
    int q = Integer.parseInt(portStr); 
    Socket socket; 
    @Override 
    protected String doInBackground(String... params) { 
    try 
    { 
    //q=8080; 
    InetAddress byIpAsName1=InetAddress.getByName("10.0.2.2"); 
    socket = new Socket(byIpAsName1, q); 
    out = new PrintWriter(socket.getOutputStream(), true); 
    in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
    String line=in.readLine(); 
     sIn=null; 
    while(line!=null){sIn=sIn.concat(line);} 
    } 
    catch (IOException e) { 
    e.printStackTrace(); 
    }//catch 
    return sIn; 
    }//in background 
    protected void onPostExecute(String... sIn) 
    { 
    String c=null; 
    final TextView tv = (TextView) findViewById(R.id.textView1); 
    c=c.concat(sIn[0]); 
    tv.setText(c); 
    } 
    } 

    }//main class 
+0

あなたはエラーのlogcatを投稿できますか? –

+0

@ジョン、応答ありがとう..下のリンクはlogcat – BudsNanKis

+0

ですhttps://docs.google.com/a/buffalo.edu/document/d/10VFYUL94revSdxSxrCmGnOFTZRNqvu7rdu1bx0iCAPY/edit – BudsNanKis

答えて

1

、重要なのは、この行です:

03-16 23:12:23.434: E/AndroidRuntime(571): java.lang.SecurityException: Requires READ_PHONE_STATE: Neither user 10040 nor current process has android.permission.READ_PHONE_STATE. 

これはあなたのコードを実行するために、あなたはアンドロイドのmanifest.xmlでREAD_PHONE_STATEパーミッションが必要であることを示しています。

<application>タグの外側で、<manifest>タグの内側にこの行を追加します。

<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 

これで問題が解決しない場合、問題はthis answerに関連している可能性が。

+0

あなたは正しいです。 ..を指摘してくれてありがとう – BudsNanKis

+0

私の答えが正しい場合は、緑のチェックマークをクリックしてそれを受け入れることを忘れないで(担当者を得るでしょう)!また、回答や質問が役に立つと思う場合は、左にある上向き矢印をクリックしてアップヴォートすることもできます。 StackOverflowへようこそ! –

+0

こんにちはJohn、ここに新しいlogcatがあります。正確に何が起こっているのか分かりません。ファイルはかなり巨大です。注目に値するものがあれば教えてください。お知らせ下さい。ありがとう。 https://docs.google.com/a/buffalo.edu/document/d/1hN-V0qL2qtzUtRCKnaslUweN62G3mxLrusM0fjI18L4/edit – BudsNanKis

関連する問題