Хм, а это как?
Прошу прощения. Не TCP. UDP протокол.
Вот Вам пример на C#. На с++ переписать, как мой дед говорил "ИЗИ..." тем более есть в сети компиляторы, которые с C# переведут на C, C+, C++.
Для андроида 2 пути. Писать "напрямую" используя Java или обойтись Unity, тут даже код подойдёт, с мизерными правками.
// --- ИСХОДНЫЙ КОД ОТПРАВКИ СООБЩЕНИЙ ---
// Отправка сообщения
void SendMessage()
{
UdpClient udp = new UdpClient();
// Указываем адрес отправки сообщения
IPAddress ipaddress = IPAddress.Parse(textBoxAddress.Text);
IPEndPoint ipendpoint = new IPEndPoint(ipaddress, 15000);
// Формирование оправляемого сообщения и его отправка.
// Сеть "понимает" только поток байтов и ей безразличны
// объекты классов, строки и т.п. Поэтому преобразуем текстовое
/// сообщение в поток байтов.
byte[] message = Encoding.Default.GetBytes(textBoxSend.Text);
int sended = udp.Send(message, message.Length, ipendpoint);
// Если количество переданных байтов и предназначенных для
// отправки совпадают, то 99,9% вероятности, что они доберутся
// до адресата.
If (sended == message.Length)
{
// все в порядке
textBoxSend.Text = "";
}
// После окончания попытки отправки закрываем UDP соединение,
// и освобождаем занятые объектом UdpClient ресурсы.
udp.Close();
}
// --- ИСХОДНЫЙ КОД ИЗВЛЕЧЕНИЯ СООБЩЕНИЙ ---
// Запуск отдельного потока для приема сообщений
void StartReceive()
{
rec = new Thread(new ThreadStart (Receive));
rec.Start();
}
// Функция извлекающая пришедшие сообщения
// работающая в отдельном потоке.
void Receive()
{
// При принудительном завершении работы метода
// класса UdpClient Receive() и непредвиденных ситуациях
// возможны исключения в этом месте исходного кода,
// заключим его в блок try чтобы не появлялись окна ошибок.
try
{
// Перед созданием нового объекта закрываем старый
// для освобождения занятых ресурсов.
if (udp != null) udp.Close();
udp = new UdpClient(15000);
while (true)
{
IPEndPoint ipendpoint = null;
byte[] message = udp.Receive(ref ipendpoint);
textBox2.Text = Encoding.Default.GetString(message);
// Если дана команда остановить поток, останавливаем бесконечный цикл.
if (stopReceive == true) break;
}
udp.Close();
}
catch
{
}
}
// Функция безопасной остановки дополнительного потока
void StopReceive()
{
// Останавливаем цикл в дополнительном потоке
stopReceive = true;
// Принудительно закрываем объект класса UdpClient
if (udp != null) udp.Close();
// Для корректного завершения дополнительного потока
// подключаем его к основному потоку.
if (rec != null) rec.Join();
}
Ну а дальше ловим события. Например с Андроида отправили sendmsg#001
Как придёт на Linux ловим мессдж и обрабатываем.
(как пример)
if(msgtxt == "sendmsg#001")
{
printf (“Открытие файла: ”);
// Открытие файла
mf=fopen (“myfile/test.txt”,”w”);
}
P.S. Единственное что нужно, это статический IP с одной стороны. Хотя и динамический подойдёт, просто чуть сложнее.
Ну это уже другая история.