Сделал так: базовый класс абстрактный и содержит абстрактные методы Code: //------------------------------------------------------------------------------ //Assigns connection handler to connection. abstract public void AssignConnection(Socket _clientSock); //Client -> Server packet processor. abstract public void OnPacketReceived(Packet _packet, ISCPConnection _conn); //Server -> Client packet processor (for logging). abstract public void OnPacketSent(Packet _packet, ISCPConnection _conn); //Called from AssignConnection() [ISCPConnection.Start() method]. abstract public void OnConnected(ISCPConnection _conn); //Called on socket disconnection, or when it's supposed to be disconnected //on error, for example. abstract public void OnDisconnected(ISCPConnection _conn); //------------------------------------------------------------------------------ А наследующий класс их просто воплощает. И всего делов то . Спасибо всем.
согласен с вами думаю вы малость не правы. написать, к примеру, трой, можно на чем угодно. вопрос только в нативности файла на выходе. трой на FASM, например, не имеет специфических зависимостей (как JVM для Java или .NET Framework для C#), следовательно, процент т.н. отстука будет гораздо выше нежели у поделок на вышеперечисленных языках. получается чем выше уровень языка, тем сложнее ему проникнуть в ОС. если ошибаюсь поправьте плиз
Ну можно и на ассемблере набыдлокодить (хотя, трудно представить лютый быдлокод как таковой на языке такого низкого уровня ). Я за стабильность софта.
имхо асм не подойдет чтоб писать на нем трой типа зевса. если писать не на ООП языке, трой будет решен много чего. асм безусловно язык который должен знать каждый нормальный программист ну очень желательно знать. НО не получится писать на нем трой на уровне зевс и.т.д простой пример. для того что на языке асм сложить два числа необходимо вызвать как минимум четыре инструкции, например: mov mov add mov на асм это означало бы первой командой MOV занести число из ячейки оперативной памяти в регистр процессора, затем занести второй операнд из оперативной памяти в ячейку процессора, потом вызвать операцию сложения ADD и переместить из регистра на котором написан результат опять в память. если даже такая простая операция требует четырех команд (кстати, выше я описал только команды, у них ведь есть еще и операнды в которых должны быть способ обращения к памяти, название регистров и.т.д) а приставьте сколько всего надо будет для более серьезного софта. язык асм близок машинному коду т.е. он ближе машине чем программисту. делай это, делай то и все типа код в стиральной машине, или софт который на АТМ. в нем отсутствует специально выделенный тип буленских (Boolean) значении т.е. для TRUE or FALSE так же нет специального символьного типа, и кучи всех благ которые есть на языках как например С++, Java. а на языках высшего уровня как С++, Java, пример выше очень прост, например: а=б+в
Я пытаюсь сказать то, что порой использовать языки более низкого уровня просто не имеет смысла (писать что-то большое на ассемблере вообще мазахизм имхо).
Вопрос по c#. (.NET 4.0) Насколько целесообразно делать так как показано в примере на MSDN ? Дело в том что я хочу реализовать асинхронное выполнение mssql-запросов. Почитал MSDN, но меня очень насторожил вот этот цикл Code: IAsyncResult result = command.BeginExecuteNonQuery(); while (!result.IsCompleted) { Console.WriteLine("Waiting ({0})", count++); // Wait for 1/10 second, so the counter // does not consume all available resources // on the main thread. System.Threading.Thread.Sleep(100); } На сколько целесообразно делать так как там пишется ? Линк: http://msdn.microsoft.com/en-us/library/ca56w9se(v=vs.100).aspx
Насколько я знаю прямая поддержка ассинхронности появилась только в .NET 4.5 , так что приведенный пример - это костыли. Вообще считаю использование System.Threading.Thread.Sleep() не есть гуд. Хотя бы тогда отдельный поток создать нужно, что бы весь софт не вис.
Да, то что надо, seosimf. Ещё вопрос... есть какие либо книги о MSIL и вообще структуре CLR на русском ?
Можно почитать: ЯЗЫК ПРОГРАММИРОВАНИЯ С#2010 И ПЛАТФОРМА .NET 4 5-е издание Эндрю Троелсен Там в начале идет о том, что такое CLR и как трансформируется код. Ну и где то в середине еще неплохо описывается, что происходит за ширмой.
Ещё вопрос... Подскажите хорошие книги по программированию сетевых приложений в .NET, ну и вообще о проектировании таковых.
Ну как пример: Professional .NET Network Programming Автор: Эндрю Кровчик, Винод Кумар, Номан Лагари, Аджит Мунгале, Кристиан Нагел, Тим Паркер, Шриниваса Шивакумар Переводчик: Вл. Стрельцов Языки: Русский Издательство: Лори
Пишу socks5 сервер на c#, .NET 2.0 Вопрос заключается в следующем: когда мы получаем запрос на подключение, то мы получаем сетевой порядок ip адреса куда подключаться (которые с лёгкостью конвертятся в IPAddress), а так же port (2 байта) который так же является так называемым сетевым порядком байт. Как его превратить в нормальный short ?
Порядок байт в сетевый пакетах отличается от порядка байт в PC. В PC используется обратный порядок хранения байт: в старшем байте хранится младший разряд, в старшем - младший. Для перевода из сетевого в порядок PC: HTML: IPAddress.NetworkToHostOrder(...) Для других случаев функции можно добыть из MSDN, благо, у .NET документация просто замечательная. P.S. решение без проблем гуглится по запросу "c# little endian to big endian".
По программированию сетевых приложений есть отличная книга: Йон Снейдер "Эффективное программирование TCP/IP". Настоятельно советую ознакомиться.
Вопрос по c#, конкретно - .NET 2.0. В каких случаях (кроме как в формовых приложениях) стоит использовать асинхронность ? Имеет ли вообще смысл, скажем для сетевых приложений с высокой нагрузкой ?