C # Асинхронный прием - PullRequest
       14

C # Асинхронный прием

0 голосов
/ 02 декабря 2011

В последнее время у меня были некоторые проблемы, когда я пытался научиться делать асинхронный прием с использованием Visual C #.У меня есть консольная серверная программа, которая получает данные от клиента и затем отправляет их обратно.Моя проблема на стороне клиента.Он должен отправлять данные на сервер каждые 100 или около того миллисекунд, а затем получать их обратно.

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

IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 16487);
TcpClient client = new TcpClient();

bool blnOnOFF;

private void SendServerData()
{
    string strData = "TEST DATA";

    NetworkStream clientStream = client.GetStream();

    ASCIIEncoding encoder = new ASCIIEncoding();
    byte[] buffer = encoder.GetBytes(strData);

    clientStream.Write(buffer, 0, buffer.Length);
    clientStream.Flush();
}

// Ticks Every 100ms
private void tmrDataTransfer_Tick(object sender, EventArgs e)
{
    SendServerData();
}
private void btnStart(object sender, EventArgs e)
{
    if (blnOnOFF == false)
    {
        tmrDataTransfer.Start();
        blnOnOFF = true;
    }
    else
    {
        tmrDataTransfer.Stop();
        blnOnOFF = false;
    }
}

Как видите, все, что он сейчас делает, это отправляет "ТЕСТОВЫЕ ДАННЫЕ".Если есть другой способ получения данных, который проще, чем асинхронный, пожалуйста, дайте мне знать, также я хотел бы узнать, как это сделать для будущих проектов.

, спасибо, дополнительно.: добавлен клиент извините я забыл об этом

1 Ответ

1 голос
/ 02 декабря 2011

Хорошо, так что вам нужно, когда ваше приложение ожидает входящих данных, вам нужно использовать TcpListener класс .

Попробуйте этот ответ SO

Класс TcpListener прослушивает входящие соединения, и когда он находит одно, он создает TcpClient, который делает свое дело.Тем временем слушатель уже вернулся к поиску новых связей.Это почти всегда только делает это и переносит работу в другие места.

Я думаю (на 70% уверен), что TcpClient, который он создает для нового соединения, будет работать на другом порту, чем тот, чтоваш слушатель использует.Таким образом, вы всегда слушаете один и тот же порт, в то время как ваша обработка выполняется в других потоках на других портах.

Имеет смысл?Я могу уточнить, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...