Форум: "Потрепаться";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];
ВнизЧтение новостных групп Найти похожие ветки
← →
Дмитрий К.К. (2002-11-29 09:31) [0]Посоветуйте, плиз, прогу по сабжу - удобную и многофункциональную.
← →
AL2002 (2002-11-29 10:12) [1]Пара прог у меня есть. Ничего о них не знаю, т.к. не юзал, но могу зафутболить.
← →
Дмитрий К.К. (2002-11-29 11:49) [2]Пасиб, Ал. Тока что нашел Agent"а. Наверное, буду юзать ее.
← →
AL2002 (2002-11-29 12:54) [3]
> Дмитрий К.К. © (29.11.02 11:49)
Ссылку, плиз.
← →
Дмитрий К.К. (2002-11-29 12:58) [4]Держи http://www.forteinc.com/agent/
← →
Вадим (2002-11-29 15:07) [5]А как у этой проги KOI8-R настроить?
← →
Дмитрий К.К. (2002-11-29 20:18) [6]Не знаю, я читаю в основном западные новостные группы.
← →
Oleg_Gashev (2002-11-29 21:01) [7]Странно. Все мы тут программисты и сделать более-менее рабочую программу могут многие. Я за два часа набрал следующее:
#include <iostream.h>
#include <winsock.h>
#include <string.h>
#include <stdio.h>
#define MAXBLOCKSIZE 80
void main(void)
{
WSADATA wsaData;
int wsaErrorCode = WSAStartup( MAKEWORD( 1, 0 ), &wsaData );
cout<<wsaErrorCode<<endl;
SOCKET sockfd = socket(AF_INET, SOCK_STREAM, 0); // do some error checking!
HOSTENT *h;
h=gethostbyname("news.microsoft.com");
sockaddr_in dest_addr;
dest_addr.sin_family = AF_INET; // host byte order
dest_addr.sin_port = htons(119); // short, network byte order
dest_addr.sin_addr.s_addr = inet_addr(inet_ntoa(*((struct in_addr *)h->h_addr)));
memset(&(dest_addr.sin_zero), "\0", 8); // zero the rest of the struct
int Timeout=1000;
setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,(const char*)&Timeout,sizeof(Timeout));
setsockopt(sockfd,SOL_SOCKET,SO_SNDTIMEO,(const char*)&Timeout,sizeof(Timeout));
ULONG ulB = FALSE; // Set socket to non-blocking mode
struct timeval Time;
fd_set FdSet;
ioctlsocket(sockfd, FIONBIO, &ulB);
// don"t forget to error check the connect()!
int c=connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr));
if (c==SOCKET_ERROR)
{
if (WSAGetLastError() == WSAEWOULDBLOCK)
{
// now wait for the specified time
FD_ZERO(&FdSet);
FD_SET(sockfd, &FdSet);
Time.tv_sec = Timeout / 1000L;
Time.tv_usec = (Timeout % 1000) * 1000;
int rc = select(0, NULL, &FdSet, NULL, &Time);
}
}
ulB = FALSE; // Restore socket to blocking mode
ioctlsocket(sockfd, FIONBIO, &ulB);
cout<<c<<endl;
char a[100];
strcpy(a,"group microsoft.public.vc.language\r\n");
send(sockfd,a,strlen(a),0);
int i=30000;
while(i<32000)
{
//cout<<"Enter string:"<<endl;
//gets(a);
i++;
strcpy(a,"next\r\nbody\r\n");
send(sockfd,a,strlen(a),0);
//strncat(a,"\r\n",100);
//strcpy(a,"article\r\n");
//send(sockfd,a,strlen(a),0);
char tmpBuffer[MAXBLOCKSIZE]={0};
int curSize = 1;
int totalReceived = 0;
char FileName[100];
char ic[6];
strcpy(FileName,"D:\\News\\microsoft\\");
itoa(i,ic,10);
strncat(FileName,ic,100);
strncat(FileName,".txt",100);
FILE *f;
f=fopen(FileName,"wt");
// receive loop
while( (curSize != SOCKET_ERROR) && (curSize != 0) )
{
try{
memset(tmpBuffer,"\0",MAXBLOCKSIZE);
curSize = recv(sockfd, (char *)tmpBuffer, (MAXBLOCKSIZE - 1), 0);
fprintf(f,(char *)tmpBuffer);
cout<<tmpBuffer;
}
catch(...) {
break;
}
}
fclose(f);
}
WSACleanup();
}
Код нуждается в доработке ( ставлю себе 2 за реализацию). Но вполне работоспособен.
← →
Дмитрий К.К. (2002-11-29 21:26) [8]
> Oleg_Gashev © (29.11.02 21:01)
Посмотри программу по ссылке (Agent). Ее писАли явно не за два часа.
← →
Oleg_Gashev (2002-11-29 21:33) [9]> Ее писАли явно не за два часа.
Естаственно, просто вопроса у меня такого не возникало. Просто когда нужна особая функциональность, реализовываю сам. Извините, но я использую Outlook Express. Большая функциональность? Да, нужна. Но в других продуктах я ее не нашел.
← →
Дмитрий К.К. (2002-11-29 21:37) [10]Скорее всего, плохо смотрел.
← →
Oleg_Gashev (2002-11-29 21:39) [11]Вам перечислить?
Пожалуйста.
Основные возможности
Возможность задания различных установок для разных newsgroups и news серверов;
Возможность использования псевдонимов для серверов и newsgroups;
Возможность представления иерархии групп в виде дерева;
Селективная загрузка списка групп, то есть работа только со списком подписанных групп и отдельно список групп на сервер, на данный момент вся информация о группах, серверах;
Работа с proxy. (Пока не знаю как, может кто-то подскажет?);
Мониторинг групп. То есть периодическая проверка на новые сообщения в группе и на сервере через заданный промежуток времени;
Фильтрация сообщений. Черный и белый списки;
Использование templates для чтения сообщений;
Import/export;
возможность получения списка newsgroups как tree. То есть, например, все группы fido7.* лежат в одной ветке.
← →
Oleg_Gashev (2002-11-29 21:41) [12]Это не весь список. Могу продолжить. Около 50 пунктов.
← →
Oleg_Gashev (2002-11-29 21:42) [13]Ваша программа не реализовывает даже пловины из перечисленного.
← →
Дмитрий К.К. (2002-11-29 21:44) [14]Лан, убедили :)
Но программа Agent тоже обладает немалым количеством функций... а идеала, думается, не достичь никому.
← →
Oleg_Gashev (2002-11-29 21:49) [15]> Дмитрий К.К.
> а идеала, думается, не достичь никому.
Реализовывается все это без проблем. Алгоритмика и функциональность не очень сложная. Работы с ней много. Одному- сделать тяжело. Если есть желание все это реализовать- пишите на email.
← →
Дмитрий К.К. (2002-11-29 21:51) [16]А Вы Паскаль, наверное, не признаете...
← →
Oleg_Gashev (2002-11-29 21:53) [17]C++, STL. И есть на это немало причин.
← →
Oleg_Gashev (2002-11-30 21:55) [18]> Дмитрий К.К.
Сделал online client для чтения newsgroups.
Посмотреть можно на http://gashev.com/news/news.html
← →
Дмитрий К.К. (2002-11-30 22:40) [19]Спасибо, обязательно посмотрю и заценю!
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.009 c