Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 510
от 31.08.2006, 02:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 370, Экспертов: 54
В номере:Вопросов: 1, Ответов: 3


Вопрос № 53295: Здравствуйте уважаемые эксперты. Вот занимаюсь потехоньку сетевым программированием. И прочитал пару туториалов, в которых описаны WinSockets. Я сейчас уделяю внимание языку С++ и знаю что этот язык платформо - независемый. Если использовать программ...

Вопрос № 53.295
Здравствуйте уважаемые эксперты. Вот занимаюсь потехоньку сетевым программированием. И прочитал пару туториалов, в которых описаны WinSockets. Я сейчас уделяю внимание языку С++ и знаю что этот язык платформо - независемый. Если использовать программу, использующую WinSocks, то она вряд ли откомпилируется под linux (g++). А вот программы типа cout << "hello world"; будут результировать одно и тоже в линукс запуская terminal window и в windows запуская мс дос окно. Есть ли для сокетов такие библиотеки, которые типичны для с++, как типа iostream.h? Или же приходится использовать отдельно сокеты для Window и отдельно для Linux? Если да, то понятие платфоромо-независмость хм.....
Заранее благодарю Вас за вашу помощь.
Отправлен: 26.08.2006, 00:06
Вопрос задал: igorok (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, igorok!
Библиотеки немного разные, но я как раз буквально вчера дописывал программу для работы с сокетами, чтобы она работала не только под UNIX, но и под Windows.
Исходников там 15кб, так что для этой формы, наверное, многовато, но могу послать на мыло (мне пишите по внутренней почте или на kirilloid<<=yandex.ru) Тем более, под рукой есть только старая и не совсем рабочая версия.
На словах пока еще могу добавить, что все-таки программа не совсем универсальная и в некоторых местах пришлось сделать директивы компилятора
типа #ifdef __WIN32__
---------
Не узнаешь - не попробуешь.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: Студент)
Ответ отправлен: 26.08.2006, 01:17
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Так и знал, что тут что-то не то.

Отвечает: din
Здравствуйте, igorok!
То же самое можно сказать и про любой другой язык программирования. Я незнаю Единственный язык, который позволяет писать код, который ненужно переделывать под ОС, это Java. Тут уже все делает JVM. Да и сетевое программирование там реализовать намного проще. Если писать на С++ и пытаться делать единый код под несколько операционок, то тут уж куча директив для прекомпилятора, одним словом полная муть. Я уже не говорю про мейк файлы. Есть проект реализация gcc под винды, MinGW называется, я ковырялся, и решил не париться. Написал на Java и запустил, работает, лично у меня проблем 60 МБ на диске для установки JRE нет.
Вот такое мое мнение.
Удачи!
---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: din (статус: Студент)
Ответ отправлен: 26.08.2006, 01:30
Оценка за ответ: 5
Комментарий оценки:
Так и знал что без Java никуда мы грешные не денемся.

Отвечает: InviZ
Здравствуйте, igorok!
Программу, написанную с использованием WinSock будет очень несложно переписать под Linux если не использовать функции, начинающиеся с WSA, такие как WSAConnect, WSARecv и т.п. - а использовать функции, начинающиеся со строчных букв, и имеющих в большинстве случаев такие же параметры, как и BSD-сокеты - socket, listen, accept, connect, recv, send, inet_ntoa, inet_addr, htons, setsockopt...

В большинстве случаев даже не придется ничего менять...
В частности, я использую несколько директив - и все нормально работает:

#ifndef _WIN32
typedef int SOCKET;
typedef int socklen_t;
#endif

#ifndef SOCKET_ERROR
#define SOCKET_ERROR -1
#endif

#ifndef INVALID_SOCKET
#define INVALID_SOCKET -1
#endif

#ifndef _WIN32
#define closesocket(s) close(s)
#endif

#ifdef _WIN32
#define SHUT_RD SD_RECEIVE
#define SHUT_WR SD_SEND
#define SHUT_RDWR SD_BOTH
#define SOCK_ERROR WSAGetLastError()
#else
#define SOCK_ERROR errno
#endif

Ну и еще при инициализации добавить блок #ifdef _WIN32 ... #endif, куда поместить вызов WSAStartup
Ответ отправил: InviZ (статус: 2-ой класс)
Ответ отправлен: 26.08.2006, 08:11
Оценка за ответ: 5
Комментарий оценки:
И все таки не такой с++ уж платформо-независимый.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.35 от 27.07.2006
Яндекс Rambler's Top100

В избранное