void AsyncSendText(string ip, int port, string text)//асинхронная посылка текста { Thread t = new Thread(() => {//потоковая процедура try { TcpClient tcpClient = new TcpClient(ip, port); NetStreamReaderWriter ns = new NetStreamReaderWriter(tcpClient.GetStream()); ns.WriteLine(text); //тут надо что-то сделать чтобы не закрыть соединение, пока клиент не примет сообщение //пока что костыль if (ns.ReadCmd().cmd != "!ok") { throw new Exception("В ответ получен не !ok"); } Thread.Sleep(10000); } catch (Exception ex) { System.Diagnostics.Debug.AutoFlush = true; System.Diagnostics.Debug.WriteLine("Dispatcher. AsyncSendText. " + ex.Message); } }); t.Start(); }
/// <summary> /// Метод вызывается перед началом(инициацией) любого взаимодействия с другой стороной. Если канал занят, то ожидание. Если сбой, то возвращает false. /// </summary> /// <returns>false если не удалось начать транзакцию(если другая сторона в этот момент тоже пытается занять канал, либо не отвечает)</returns> public bool Begin() { string ans = ""; mutex.WaitOne(); netStream.WriteLine("!beginlockrequest"); try { ans = netStream.ReadLine(); } catch (Exception ex) { mutex.ReleaseMutex(); return(false); } if (ans != "!lockaccepted") { return(false); } return(true); }
void SendText(string ip, int port, string text)//синхронная посылка команды(в том же потоке) { try { TcpClient tcpClient = new TcpClient(ip, port); NetStreamReaderWriter ns = new NetStreamReaderWriter(tcpClient.GetStream()); ns.WriteLine(text); } catch (Exception ex) { System.Diagnostics.Debug.AutoFlush = true; System.Diagnostics.Debug.WriteLine("Dispatcher. AsyncSendText. " + ex.Message); } }