2015-10-09 5 views
1

У меня проблема с сообщением сервер-клиент. Я googled вокруг, но я не нашел решение этого. Прямо сейчас я использую 32feet для того, чтобы связаться с двумя или более (до 7) клиентами BT до 1 сервера BT. Мне нужно передать сообщение с сервера на все устройства в одно и то же время, но я не знаю, как это сделать. Единственный способ, которым я понял, - использовать список соединений для отправки сообщения один раз за раз, но это означает задержку между каждым отправленным сообщением (около 100 мс на устройство). К сожалению, это означает большую задержку на последнем. Может кто-нибудь, пожалуйста, дайте мне совет о том, как решить эту проблему? Есть ли способ трансляции сообщения на все устройства в одно и то же время?Передача от сервера bluetooth до нескольких клиентов bluetooth с 32feet

Если это может быть полезно, здесь есть ручка подключения и считывания с устройств.

Спасибо за вашу помощь

private void btnStartServer_Click(object sender, EventArgs e) 
    { 
     btnStartClient.Enabled = false; 
     ConnectAsServer(); 
    } 

    private void ConnectAsServer() 
    { 
     connessioniServer = new List<BluetoothClient>(); 

     // thread handshake 
     Thread bluetoothConnectionControlThread = new Thread(new ThreadStart(ServerControlThread)); 
     bluetoothConnectionControlThread.IsBackground = true; 
     bluetoothConnectionControlThread.Start(); 

     // thread connessione 
     Thread bluetoothServerThread = new Thread(new ThreadStart(ServerConnectThread)); 
     bluetoothServerThread.IsBackground = true; 
     bluetoothServerThread.Start(); 
    } 

    private void ServerControlThread() 
    { 
     while (true) 
     { 
      foreach (BluetoothClient cc in connessioniServer) 
      { 
       if (!cc.Connected) 
       { 
        connessioniServer.Remove(cc); 
        break; 
       } 
      } 
      updateConnList(); 
      Thread.Sleep(0); 
     } 
    } 

    Guid mUUID = new Guid("fc5ffc49-00e3-4c8b-9cf1-6b72aad1001a"); 
    private void ServerConnectThread() 
    { 
     updateUI("server started"); 
     BluetoothListener blueListener = new BluetoothListener(mUUID); 
     blueListener.Start(); 
     while (true) 
     { 
      BluetoothClient conn = blueListener.AcceptBluetoothClient(); 
      connessioniServer.Add(conn); 
      Thread appoggio = new Thread(new ParameterizedThreadStart(ThreadAscoltoClient)); 
      appoggio.IsBackground = true; 
      appoggio.Start(conn); 
      updateUI(conn.RemoteMachineName+" has connected"); 

     } 
    } 

    private void ThreadAscoltoClient(object obj) 
    { 
     BluetoothClient clientServer = (BluetoothClient)obj; 
     Stream streamServer = clientServer.GetStream(); 
     streamServer.ReadTimeout=1000; 
     while (clientServer.Connected) 
     { 
      try 
      { 
       int bytesDaLeggere = clientServer.Available; 
       if (bytesDaLeggere > 0) 
       { 
        byte[] bytesLetti = new byte[bytesDaLeggere]; 
        int byteLetti = 0; 
        while (bytesDaLeggere > 0) 
        { 
         int bytesDavveroLetti = streamServer.Read(bytesLetti, byteLetti, bytesDaLeggere); 
         bytesDaLeggere -= bytesDavveroLetti; 
         byteLetti += bytesDavveroLetti; 
        } 
        updateUI("message sent from "+clientServer.RemoteMachineName+": " + System.Text.Encoding.Default.GetString(bytesLetti)); 
       } 
      } 
      catch { } 
      Thread.Sleep(0); 
     } 
     updateUI(clientServer.RemoteMachineName + " has gone"); 
    } 



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

    private void updateConnList() 
    { 
     Func<int> del = delegate() 
     { 
      listaSensori.Items.Clear(); 
      foreach (BluetoothClient d in connessioniServer) 
      { 
       listaSensori.Items.Add(d.RemoteMachineName); 
      } 
      return 0; 
     }; 
     try 
     { 
      Invoke(del); 
     } 
     catch { } 
    } 

ответ

1

Я не совсем понимаю, как вы это делаете прямо сейчас (итальянские имена не помогают ...), но, возможно, мое решение может помочь вам.

Прежде всего, bluetooth classic не поддерживает вещание. поэтому вам нужно доставлять по одному за раз. Я подключаюсь к 7 устройствам последовательного порта за раз, используя 7 потоков. затем я рассказываю каждому потоку о передаче данных. это очень близко к тому же времени, но, конечно, не совсем так.

дайте мне знать, если это поможет или вам нужен пример кода.

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