2013-07-18 2 views
0

У меня есть приложение для Android, которое в настоящее время использует Socket Listener для прослушивания входящих соединений из приложения C#. Я могу заставить приложение C# отправить строку в приложение Android, но Socket Listener, похоже, только принимает/выполняет необходимый код для записи информации только один раз, но продолжает принимать входящие запросы на соединение из приложения C#.Android Socket Listener работает только

Я обыскал 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); 
} 
+0

Поскольку вы читаете строку readline(), она ожидает «\ n» в конце строки, на стороне C# попробуйте что-то вроде этого 'clientSocket.Send (Encoding.UTF8.GetBytes (« Test Input \ n "));' –

ответ

0

Вы break ИНГ из цикла:

} 
          in.close(); 
          break; 

Удалить break. Я думаю, что вам может понадобиться continue, предполагая, что вы хотите вернуться к началу бесконечного цикла.

+0

И это, и рекомендованное Дэном изменение кода решают проблему. Спасибо вам за оперативную помощь. – Snuffaluffagus

Смежные вопросы