2011-12-26 13 views
0

私はアンドロイドアプリで作業しています。アプリのボタンを押すと、PCのサーバーリストにキーストロークが送信されます。ボタンが急に押されたときに、出力が「吃音」になるという問題は、すべてうまくいきます。クライアント上で急速に押すと、サーバーが「吃音」し、時には単に応答しなくなることがあります。私が使用しているタラは非常に簡単です。シンプル?"stutter"を使わずにアンドロイドデバイスからPCにキーストロークを送信

サーバー側:

ServerSocket welcomeSocket = new ServerSocket(6789); 
     while(true) 
     { 

      Socket connectionSocket = welcomeSocket.accept(); 
      BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 

      keyin = inFromClient.readLine(); 
       robby.translateAndForward(keyin); 
      } 

     } 
catch (Exception ex) 

....クライアントで

public class ImageBoundListener implements OnTouchListener { 
private ImageView view; 
private static PadClient client; 

上のタッチイベントハンドラー

@Override 
    public boolean onTouch(View view, MotionEvent event) { 
     int action = event.getAction() & MotionEvent.ACTION_MASK;; 
if (client==null) 
{ 
    client=new PadClient(); 
} 
if (action==MotionEvent.ACTION_DOWN) 
{ 
    client.sender("A"); 
} 

     Integer actionCode = action & MotionEvent.ACTION_MASK; 
    Log.d(actionCode.toString()," Event occured on: "+view.getTag()); 


return true;   
     } 


    } 

実際のセンド・実装

try{ 
    Socket clientSocket = new Socket("192.168.1.104", 6789); 
     DataOutputStream outToServer = new  DataOutputStream(clientSocket.getOutputStream()); 
    System.out.println("Writing bytes to the server.."); 
     outToServer.writeBytes(send); 
     clientSocket.close(); 
} 

のはここから行くことがわからない...

答えて

1

あなたのコードにはいくつかの問題があります:あなたのコードは、接続を開いている

たびにボタンが押されているが。急速に押すと、多くの接続がクライアントとサーバーの間で同時に開かれます。 1つの永続的な接続を作成し、それを介してすべてのデータを送信する方がよいでしょう。

また、クライアント側で何らかのバッファリングを追加することもできます。つまり、いくつかのボタンからのデータが1つのデータパケットにまとめられ、サーバーに送信されるということです。

クライアントとサーバー間の通信に問題がある場合 - ネットワークI/Oログ(送信されたものと受信されたもの)は非常に重要です。

あなたのサーバー側は次のようになります。助けを

try { 
    ServerSocket welcomeSocket = new ServerSocket(6789); 
    Socket connectionSocket = welcomeSocket.accept(); 
    BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
    while(true) {   
     keyin = inFromClient.readLine(); 
     Log.d("SERVER"," received: '" + keyin + "'"); 
     robby.translateAndForward(keyin); 
    } 
} 
catch (Exception ex) {} 
+0

感謝を。私はこれを別の方向に持ち帰り、ホイールを再発明しないことにしました。私はhttp://code.google.com/p/kryonet/(BSDライセンスサーバークライアント、PCとアンドロイドで動作します)を使用するように見えます。 –

関連する問題