using System;
using System.Collections.Generic;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
string input = "blablabla print('Test 1'); blabla print('Test 2')";
string pat = "print('";
int pos = 0;
List<string> findings = new List<string>();
while ( pos < input.Length)
{
pos = input.IndexOf(pat, pos);
if (pos < 0) break; else pos += pat.Length;
int endpos = input.IndexOf("'", pos);
if (endpos > 0)
{
findings.Add(input.Substring(pos, endpos - pos));
pos = endpos + 1;
}
}
foreach(var item in findings) { Console.WriteLine(item); }
Console.ReadLine();
} // void Main
} // class Program
} // namespace
И что нужно изменить чтобы она допустим искала символы после точки, но те которые оканчиваются например ;?
string pattern = @"print\(\'([^\']*)\'\)";
В частности, вопрос в том, может ли клиент принимать входящее соединение или нет. Если может, то сервер может пушить запрос типа "ты жив еще?" и судить по ответу клиента. Если нет, то, опять же, после того, как клиент установил соединение, его можно просто не разрывать.
Но если инициировать соединение может только клиент, то да, периодически отправляется сообщение "я живой" на сервер. Далее по протоколу, например, сервер может сообщить, через сколько секунд желательно снова подать сигнал, а можно и тупо по таймеру. Соединился отправил исходящие сообщения, спросил, есть ли входящие, скачал и отключился.
Если бы я разрабатывал, то для сигналов жизнедеятельности слал бы по протоколу udp, а данные передавал бы по tcp. Разработка протокола связи вообще интересная вещь, но начинать её лучше не с клавиатурой, а с тетрадкой и ручкой.