Вопрос № 132234: Всем привет. Есть программа на MS Visual C++. У меня по ней несколько конкретных вопросов:
1) В потоке ClientThread выполняется следующее:
SOCKET s = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
sockaddr_in saddr;
Вопрос: что здесь ...Вопрос № 132246: Здравствуйте, уважаемые эксперты! Пожалуйста, помогите написать программу на языке программирования С для решения следующей задачи: " Дан текст из не более 60 слов. В каждом слове не более 5 букв. Напечатайте: а) текст, составленный из последних...Вопрос № 132299: Помогите пожалуста написать класс Something, который будет всегда иметь ровно один обект. Предложить применение этого
класса. ...Вопрос № 132309: Здравствуйте уважаемые эксперты. Помогите пожалуйста с программой на Си, которая выводит календарь введённого года, дни месяца должны быть расположены столбцами, так что каждый столбец соответствует одной неделе.
Для заданного пользователем дня ...
Вопрос № 132.234
Всем привет. Есть программа на MS Visual C++. У меня по ней несколько конкретных вопросов:
1) В потоке ClientThread выполняется следующее:
SOCKET s = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
sockaddr_in saddr;
Вопрос: что здесь sockaddr_in saddr и что оно делает?
2) Как нужно переделать вот этот
saddr.sin_family = AF_INET;
saddr.sin_port = htons(6553);
saddr.sin_addr.s_addr = inet_addr(REMOTE_ADDR);
wchar_t tmpbuf[64];
GetWindowTextW(hEditWnd,tmpbuf,64);
int size = sendto(s,(char*)&tmpbuf,((int)wcslen(tmpbuf)+1)*2,0,(sockaddr*)&saddr,sizeof(sockaddr_in));
closesocket(s);
return 0;
текст, чтобы послать с помощью широковещательного UDP-пакета всего 2 байта, равных, скажем, 0001 (в 16-ричных кодах)?
3) Зачем нужен closesocket(s) и нужно ли его делать, если пересылаешь большой объем данных непрерывно.
4) В строке saddr.sin_family = AF_INET
Что такое здесь AF_INET ?
5) Какого типа здесь массив (в смысле что это за тип):
wchar_t tmpbuf[64];
Принципиально ли здесь было создавать именно такого типа массив, или можно было обойтись простым char-массивом?
Приложение:
Отправлен: 15.04.2008, 02:57
Вопрос задал: Blackie (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ross
Здравствуйте, Blackie!
1) saddr - это структура типа sockaddr_in, которая хранит ip адрес и порт получателя. Используется затем в функции sendto для отправки данных
2) нужно в качестве ip-адреса получателя установить INADDR_BROADCAST.
Отправляются данные так:
unsigned short value = 0x0001;
sendto(s,(char*)&value,2,0,(sockaddr*)&saddr,sizeof(sockaddr_in));
3) closesocket, собственно, закрывает сокет. при этом освобождается связанная с ним структура данных.
если выполнялась команда bind, то также закрывается порт
При частой передаче данных постоянно открывать/закрывать сокет, естественно, непродуктивно
4) параметр af в функции socket - семейство протоколов. может быть:
AF_UNSPEC — спецификация не указана;
AF_INET — интернет-протоколы TCP, UDP и т.д.
AF_IPX — протоколы IPX, SPX;
AF_APPLETALK — протокол AppleTalk;
AF_NETBIOS — протокол NetBIOS;
5) wchar_t - широкосимвольный char или Unicode16. По сути является обычным short. Если планируете передавать строку напр на русском, то лучше использовать этот тип, а вообще, конечно, можно обойтись и char
--------- Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: Практикант)
Ответ отправлен: 15.04.2008, 03:43 Оценка за ответ: 5 Комментарий оценки: спасибо за подробный ответ
Вопрос № 132.246
Здравствуйте, уважаемые эксперты! Пожалуйста, помогите написать программу на языке программирования С для решения следующей задачи: " Дан текст из не более 60 слов. В каждом слове не более 5 букв. Напечатайте: а) текст, составленный из последних литер всех слов текста. б) все слова из списка С, содержащие ровно 2 буквы d."
Отправлен: 15.04.2008, 06:53
Вопрос задал: Vesel4 (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Drumm3R
Здравствуйте, Vesel4!
Вот код.
Компилировал в VC 6.0
Приложение:
Ответ отправил: Drumm3R (статус: 2-ой класс)
Ответ отправлен: 15.04.2008, 14:46
Вопрос № 132.299
Помогите пожалуста написать класс Something, который будет всегда иметь ровно один обект. Предложить применение этого класса.
Отправлен: 15.04.2008, 12:59
Вопрос задал: LordThief (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Терсков Сергей
Здравствуйте, LordThief!
Это вопрос из области шаблонов проектирования. За разъяснениями вам сюда:
Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 16.04.2008, 02:44
Вопрос № 132.309
Здравствуйте уважаемые эксперты. Помогите пожалуйста с программой на Си, которая выводит календарь введённого года, дни месяца должны быть расположены столбцами, так что каждый столбец соответствует одной неделе.
Для заданного пользователем дня программа должна указывать день недели. Спасибо.
Отправлен: 15.04.2008, 13:28
Вопрос задал: Jvegas (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Verena
Здравствуйте, Jvegas!
По сути, чтобы вывести календарь на любой год, нужно вычислить день недели, приходящийся на 1 января этого года. Узнать, на какой день недели приходится заданное число, очень просто - для этого существует специальная формула (конечно, при желании можно придумать собственный алгоритм). Подробнее о ней и составлении "вечных" календарей можно посмотреть здесь
или здесь.
Для вывода календаря на экран я выбрала следующий алгоритм: определяем день недели, на который приходится первое число очередного месяца, и считаем первым числом месяца 1-номер_дня_недели, где номер_дня_недели - целое число от 0 до 6, где 0 - воскресенье. Далее в цикле формируем семь строк, каждую, в свою очередь, также формируем в цикле, где каждое записываемое число проверяем на корректность (т.е. если число больше 0 и удовлетворяет границам данного месяца, мы пишем в строку само число, иначе - пишем в строку
пробелы для табуляции). Для удобства вывода, числа и названия дней недели/месяцев занесены в массивы. Я реализовала только вывод календаря по году, а вторую часть задания Вы легко добавите сами - нужно просто вызвать функцию GetDOW для введённой пользователем даты (плюс, возможно, проверить дату на корректность, но это уже на Ваше усмотрение).
Код с комментариями в приложении (среда разработки - VS2005, использованы stl-строки). Удачи!
Приложение:
--------- Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: Практикант)
Ответ отправлен: 17.04.2008, 01:08