2016-08-04 8 views
-4

私はアンドロイドプログラミングの初心者です。アンドロイドスタジオであなたの助けを求めています。クライアント/サーバベースのチャットアプリケーションをローカルで作成する必要がありますエリアネットワーク..どのように私はこのアプリを構築することができますし、それを行う最も簡単な方法かもしれません..アンドロイドスタジオのソケットを使ったシンプルなTCP/IPチャット

+0

チュートリアルを検索するのが最善の策です。誰かが答えることができる特定の質問をしているわけではありません。 – CindyH

+0

あなたはopensourceプロジェクトから仕事を始めることができます。[firechat](https://firechat.firebaseapp.com/) – suiwenfeng

+0

チャットサーバーを作成し、ラップしたアプリケーションベースを作成します。 – suiwenfeng

答えて

1

私はあなたが把握するためですが、これをコードする方法を教えていないが、私はあなたがする必要があることを教えてください。

まず、サーバーを作成する必要があります。あなたは、ポート946や他のソケットにまだバインドされていない/ユーザーであると言うTCPソケットを開くことで、これを行うでしょう。次に、クライアントから送信されたメッセージパケットを処理するパケットハンドラを作成する必要があります。

クライアント側では、クライアントのソケットを作成し、そのソケットをリモートホストに接続する必要があります。これで、メッセージパケットを作成し、この新しく作成されたソケットを介してリモートホストに送信し、サーバはそのパケットをコード化して処理します。

0

ここでは、開始するためのサンプルコードを示します。サーバー側

私は、XMLレイアウトを使用してAndroidのUIを作成する方法を知っていると信じています。 xmlレイアウトでは、idsを持つボタンlistViewを追加します。 ボタンをクリックすると、サーバーが起動し、クライアントからのメッセージを受信するためにそのサーバーを開いたままにします。

MainActivityでは、2つのインスタンス、Button、およびListViewを作成した後、findViewByIdでIDを検索します。 作成したアダプタにlistViewを設定します。

ArrayAdapter<String> myAdapter = new ArrayAdapter<>(MainActivity.this, R.layout.list_items, list); 
listView.setAdapter(myAdapter); 

ボタンをクリックすると、以下のメソッドが呼び出されます。

public void startListening(){ 
    myThread = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try{ 
       ServerSocket server = new ServerSocket(6000); 
       while(st) { 
        Socket socket = server.accept(); 
        Message clientMessage = Message.obtain(); 
        ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); 
        String strMessage = (String) ois.readObject(); 
        clientMessage.obj = strMessage; 
        myHandler.sendMessage(clientMessage); 
        ois.close(); 
       } 
       server.close(); 
      } catch (IOException e) { 
       Message msg = Message.obtain(); 
       msg.obj = e.getMessage(); 
       myHandler.sendMessage(msg); 
      } catch (ClassNotFoundException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    myThread.start(); 
} 

サーバーを起動し、クライアントから受信するデータのwhileループを使用して開いたままにします。 このメソッドを追加してUIスレッドを更新します。クライアント側

Handler myHandler = new Handler(){ 
    @Override 
    public void handleMessage(Message status){ 
     String myMessage = status.obj.toString(); 
     list.add(myMessage); 
    } 
}; 

XMLでサーバーにデータを送信するためのEditTextと送信ボタンを追加します。

mainActivityでは、editTextとButtonのインスタンスを作成し、findViewByIdでIDを探します。

editText =(EditText)findViewById(R.id.editText); 
    send = (Button)findViewById(R.id.send); 

送信ボタンのオンクリックです。

send.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      myString = editText.getText().toString(); 
      sendData(); 
     } 
    }); 

ベローはsendData()メソッドです。

public void sendData(){ 
    Thread thread = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       Socket socket = new Socket("127.0.0.1", 6000); 
       ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()); 
       oos.writeObject(myString); 
       oos.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    thread.start(); 
} 

2台のプロジェクトを同じAndroidデバイスまたはエミュレータで実行します。 私はこれがあなたを始めなければならないと思います。

関連する問題