![]() |
|
Модераторы: feodorv |
![]()
|
|
| SIRIUStar |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 20.7.2007 Где: Одинцово Репутация: нет Всего: нет |
Здравствуйте люди! Вот попробовал себя в сетевом программировании) Прошу посмотреть что у меня вышло! Программа вполне работает и делат то что я от нее хотел) Но можно ли так делать в больших приложениях или нет и вообще есть ли здесь ошибки, огрехи, неточности? Если кто знает как сделать более совершеный код, пожалуйста, сообшите мне
Клиент соединяется с сервером и кидает на него строки текста, на сервере же в консоль выводятся эти строки в виде ip:port<N клиента>Nick: строка Как вы поняли возможно подключение нескольких клиентов)) Код Сервера
Код клиента
Это сообщение отредактировал(а) SIRIUStar - 23.7.2007, 18:46 |
||||
|
|||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
Попробуй погонять сервер, при этом в таскменеджере следи за количеством дескрипторов. Оно будет нарастать, так как ты не вызываешь CloseHandle(hThread);
|
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
сервер не смотрел, посмотрел клиент:
1. CompStr: в общем-то можно было бы воспользоваться стандартной функцией сравнения, но если уж писать свои функции такого рода, то лучше сравнивать до нулевого символа, а то получается двойная работа (прохождение до 0 в strlen + прохождение до конца для сравнения) 2. если сокет не сможет соединиться, произойдёт return EXIT_FAILURE, а сам сокет не удалится 3. похожая ситуация с WSACleanup() (хотя эти две ситуации учтены в обработке ошибки посылки) т.к. используется C++, можно использовать следующий способ захвата/освобождения ресурсов: описываем класс в конструкторе выделяем ресурс в деструкторе его освобождаем это позволяет просто бросать исключения при ошибках, при этом все ресурсы, выделенные таким образом, будут нормально освобождены пример:
соответственно можно и закрытие сокета сделать Это сообщение отредактировал(а) maxim1000 - 27.7.2007, 18:03 -------------------- qqq |
|||
|
||||
| SIRIUStar |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 20.7.2007 Где: Одинцово Репутация: нет Всего: нет |
Спасибо за предложения! Хорошая идея с С++ кодом!
Это сообщение отредактировал(а) SIRIUStar - 28.7.2007, 19:19 |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 1 Всего: 162 |
таскменеджер - это приложение Винды (ну или другой ОС) и к Билдеру не имеет никакого отношения. Нажми Ctrl+Alt+Del - и оно появится, если у тебя Винда. |
|||
|
||||
| ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
1.
Вместо конкретного адреса всегда лучше использовать INADDR_ANY. 2. При нормальном отсоединении другой стороны recv возвращает 0. 3. recv не завершает строку '\0'. Поэтому надо делать это самому:
4. recv и send не получают/отсылают всей строки, поэтому чтобы отослать всю строку надо вызывать send/recv в цикле. 5. Проверка возвращаемых значений socket, accept, CreateThread. 6. Что такое -1 для SOCKET? 7. Не стоит. В больших приложениях применяются другие методы (часто комбинированные). У тебя, например нет контроля количества потоков, поэтому в некоторый момент потоков может не хватить. Да и не особо эффективно создавать на каждого клиента по потоку. 8. Вместо 256 стоит поставить strlen(UserMessage) 9. Да, чуть не забыл. Переменные при объявлении стоит инициализировать. Это сообщение отредактировал(а) ptr - 29.7.2007, 20:03 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
| SIRIUStar |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 20.7.2007 Где: Одинцово Репутация: нет Всего: нет |
Спасибо все понял! спасибо за участие) Доброго времени!
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |