2016-06-12 12 views
0

Я использую Bluetooth-связь между Android-приложением и приложением C# для Windows. Приложение Android работает как клиент и приложение C# в качестве сервера. Я могу работать только с подключением на сервере (ноутбуке), и когда я отключусь и попытаюсь подключиться, ничего не происходит. Я думаю, что клиентская сторона работает правильно, потому что я проверил ее с помощью другого мобильного устройства, и ошибка была в коде сервера.связь Bluetooth с Android-приложениями и C# windows form app

Это код сервера:

public partial class Form1 : Form 
{ 
    Thread connectserver; 
    Stream mstream; 
    BluetoothClient client; 
    BluetoothListener bluelisten; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     if (serverstart) 
     { 
      updateui("server already started"); 
     } 
     connectasserver(); 
    } 

    private void connectasserver() 
    { 
     connectserver=new Thread(new ThreadStart (serverconnectedthread)); 
     connectserver.Start(); 

    } 
    Guid muuid = new Guid("00001101-0000-1000-8000-00805F9B34FB"); 
    bool serverstart = false; 
    public void serverconnectedthread() 
    { 
     serverstart = true; 
     updateui("waiting for connections of clients\n"); 
     bluelisten = new BluetoothListener(muuid); 
     bluelisten.Start(); 
     client = new BluetoothClient(); 
     client = bluelisten.AcceptBluetoothClient(); 
     updateui("client has connected\n"); 
     mstream=client.GetStream(); 

     while(true) 
     { 
      try 
      { 
       byte[] recieved = new byte[1024]; 
       mstream.Read(recieved, 0, recieved.Length); 

       updateui("recieved: " + Encoding.ASCII.GetString(recieved)); 
       byte[] sent = Encoding.ASCII.GetBytes(" hello world\n"); 
       mstream.Write(sent, 0, sent.Length); 
      } 
      catch(IOException except) 
      { 

       updateui("client has been disconnected\n"); 
       connectserver.Abort(); 
       client.Close(); 
       mstream.Flush(); 
       break; 
      } 
     } 

    } 

    private void updateui(string mess) 
    { 
     Func<int> del = delegate() 
     { 
      textbox3.AppendText(mess + System.Environment.NewLine); 
      return 0; 
     }; 
     Invoke(del); 

    } 

    private void label1_Click(object sender, EventArgs e) 
    { 

    } 

    private void textBox3_TextChanged() 
    { 

    } 
} 
+0

Ваш вопрос не кажется достаточно ясным, вы имеете в виду, что вам придется перезапустить программное обеспечение C# после отключения, чтобы вы могли снова подключиться? – Ogbe

+0

Я хочу, чтобы после того, как я подключил первое устройство, подключенное к серверу, снова подключаться к тому же устройству или othet-устройству, и этого не происходит с этим кодом. Этот код может иметь только одно соединение с ним, и после его отсоединения он не может прослушивать какое-либо другое соединение с любого другого устройства или того же устройства. – nayirmicheal

+0

Какая ошибка возникает, когда вы пытаетесь прослушивать соединение во второй раз? – Ogbe

ответ

0

поймать (IOException исключением) {

  updateui("client has been disconnected\n"); 
      connectserver.Abort(); 
      severstart = false;  // add this line to the catch block. 
      client.Close(); 
      mstream.Flush(); 
      break; 
     } 

Set severstart равно ложь, так что он не предполагает, что уже начал сервер.

+0

bool serverstart предназначен только для печати «сервер уже запущен» .it не влияет на какие-либо другие строки кода, кроме th строка updateui («сервер уже запущен»); – nayirmicheal

+0

Как насчет возврата строки 0. Что она делает? – Ogbe

+0

Это возвращаемое значение delgate, потому что оно возвращает nayirmicheal