0

現在、Socket Listener を使用して C# アプリケーションからの着信接続をリッスンしている Android アプリケーションがあります。C# アプリケーションから Android アプリケーションに文字列を送信することはできますが、ソケット リスナーは、情報を書き出すために必要なコードを 1 回だけ受け入れて実行するように見えますが、C# アプリケーションからの着信接続要求を受け入れ続けます。

私は Stackoverflow を検索し、Google で多くの時間を費やしましたが、この問題の正確な原因を突き止めることはできません. 以下は私のコードです。

Android コード

public class ScoringActivity extends Activity
{

    InputStream is;
    private String ipAddress = "";
    ProgressDialog progress;

    private TextView serverStatus;

    // DEFAULT IP
    public static String SERVERIP = "10.0.2.2";

    // DESIGNATE A PORT
    public static final int SERVERPORT = 6000;

    private Handler handler = new Handler();

    private ServerSocket serverSocket;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.scoring);
        Intent intent= getIntent();
        ipAddress = intent.getStringExtra("ipAddress");
        setProgressBarIndeterminateVisibility(false);
        Thread fst = new Thread(new ServerThread());
        fst.start();
    }

    public class ServerThread implements Runnable 
    {
        public void run() 
        {
            try 
            {
                if (SERVERIP != null) 
                {
                    handler.post(new Runnable() 
                    {
                        @Override
                        public void run() 
                        {
                            Log.d("Listening on IP: ", SERVERIP + " " + SERVERPORT);
                        }
                    });
                    serverSocket = new ServerSocket(SERVERPORT);
                    while (true) 
                    {
                        // LISTEN FOR INCOMING CLIENTS
                        Socket client = serverSocket.accept();
                        handler.post(new Runnable() 
                        {
                            @Override
                            public void run() 
                            {
                              Log.d("Connected.","Connected.");
                            }
                        });

                        try 
                        {
                            BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                            String line = null;
                            while ((line = in.readLine()) != null) 
                            {
                                Log.d("ServerActivity", line);
                                handler.post(new Runnable() 
                                {
                                    @Override
                                    public void run() 
                                    {
                                      Log.d("In the run method", "in the run method");
                                    }
                                });
                            }
                            in.close();
                            break;
                        } catch (Exception e) 
                          {
                            handler.post(new Runnable() 
                            {
                                @Override
                                public void run() 
                                {
                                    Log.d("Oops. Connection interrupted. Please reconnect your phones.","Oops. Connection interrupted. Please reconnect your phones.");
                                }
                            });
                            e.printStackTrace();
                          }
                    }
                } else 
                {
                    handler.post(new Runnable() 
                    {
                        @Override
                        public void run() 
                        {
                            Log.d("Couldn't detect internet connection.","Couldn't detect internet connection.");
                        }
                    });
                }
            } catch (Exception e) 
            {
                handler.post(new Runnable() 
                {
                    @Override
                    public void run() 
                    {
                        Log.d("Error","Error");
                    }
                });
                e.printStackTrace();
            }
        }
    }
}

C# コード

//ProcessSqlFiles();
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
    if (!clientSocket.Connected)
        clientSocket.Connect(IPAddress.Parse("127.0.0.1"), 8080);
    clientSocket.Send(Encoding.UTF8.GetBytes("Test Input"));
    clientSocket.Close();
}
catch (Exception ex)
{
    Debug.WriteLine(ex.Message);
}
4

1 に答える 1

0

あなたはbreakループの外にいます:

}
                            in.close();
                            break;

breakステートメントを削除します。continueあなたが望むのは、無限ループの最初に戻りたいと思っていることだと思います。

于 2013-07-18T15:43:12.580 に答える