Как читать несколько TCP (портов) одновременно? - PullRequest
0 голосов
/ 09 октября 2011

Можно ли читать несколько (2 порта TCP) одновременно?

Пример:

    public void getFeed()
    {
        while(true)
        {
            try 
            {
                if (!isReadableStream()) throw new Exception("not readable Stream");
                recieveMsg = streamReader.ReadLine();

                if(!String.IsNullOrEmpty(recieveMsg))
                {
                    displayConsole(recieveMsg, false);

                }
            }
            catch(Exception ex)
            {
                displayError(ex.Message);
            }
        }
    }

Функция выше читает 1 порт, и я хочу прочитать другой порт, потому что сервер получает каналы от другого сервера каждые 1-2 секунды.

1 Ответ

2 голосов
/ 09 октября 2011

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

Асинхронное чтениес другой стороны, это означает, что когда вы вызываете метод Read, он запускает операцию чтения и немедленно возвращается к выполнению вашего кода.Ваш код продолжает выполняться, и в какой-то момент в будущем (когда будут доступны некоторые данные) предоставленный вами делегат будет отозван.Затем он завершает операцию чтения для получения данных.

Затем вы можете инициировать столько чтений, сколько необходимо, и уйти и делать все, что вы хотите сделать (или сидеть в занятом цикле ожидания) до результатоввозвращайтесь. Вам просто нужно обратить внимание на то, откуда поступили данные, чтобы отслеживать различные потоки сообщений, поступающие в ваше приложение.

Ознакомьтесь с операциями асинхронного потока, такими как NetworkStream.BeginRead .

Примеры можно легко найти, выполнив поиск в C # TCPClient BeginRead и похожих запросах, например,

http://www.albahari.com/nutshell/ch20.aspx

NetworkStream BeginRead/ EndRead

и т. Д.

...