Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » нужен с++ код для посылки пакета данных в инет

Ответить
Настройки темы
нужен с++ код для посылки пакета данных в инет

Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120


Конфигурация

Профиль | Отправить PM | Цитировать


У меня такая проблема - два компа подсоединены к инету через один роутер, он сам автоматически подсоединяется в инет. Но если инет не был в течении нескольких минут нужен (то есть не было ни одного пакета данных отправлено), то роутера отсоединяется от инета и подсоединяется снова только в случае, если ктото например открыл браузер. Это всё не беда, но это подсоединение длиться где то секунд двадцать, вроде недолго, но ждать всё время надоедает, и ктому же отключается аська, если я давно ничегов инете не делал. В настройках роутера постоянную связь сделать нельзя, значит надо обходными путями идти, отсюда возникла мысль:
Нужна маленькая программка, которая бы например каждую минуту отсылала бы какое то определённое количество пакетов (хотя бы общим размером 1 кб) куда нибудь в инет (или что нибудь проверяла, например есть такой то файл на таком то сайте (хостинг у меня в инете есть)) для эмуляции постоянного соединение к инету (то есть роутер будет регистрировать какие то телодвижения и не будет отключаться от инета). Мне не нужна готовая программка, нужен код, дальше я всё сам скомпилирую, или намекните какие функции и/или библиотеки мне могут понадобиться для такой простой программки

Отправлено: 20:41, 07-03-2005

 

Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


Цитата:
намекните какие функции и/или библиотеки мне могут понадобиться для такой простой программки
намекну Вот функции API которые Вам будут нужны:
InternetOpen, InternetOpenURL, InternetCloseHandle, GetTickCount, возможно еще HTTPQueryInfo и InternetReadFile.

Отправлено: 21:16, 07-03-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


вот очень сырой код с использованием сокетов для работы по протоколу tcp.



Код: Выделить весь код
#include <windows.h>
#include <stdio.h>

SOCKET sClient;
WSADATA lpWSAData;
char *http_user_agent="Mozilla/4.0 (compatible; MSIE 5.0; Win32)";
static char Rec[2048000];
char szFile[MAX_PATH]="test"; 
HANDLE hFile;

bool SendString(SOCKET sClient,char* str);
char* GetString(SOCKET sClient);
int OpenURL(char *url);
void CloseURL(void);
                         
void main(void) 
{	
	hFile=CreateFile(szFile,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,
		NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
	int err=OpenURL("mail.ru");
	if (err != 0) 
		printf("Error #%d: %d\n",err, WSAGetLastError());
	CloseURL();
	CloseHandle(hFile);
}

int OpenURL(char *url) {
	char szQuery[2048];    // string for send request to server
	char szHlp[2048]; //helper string that contains server name and path on the server
	char *pch; 	
	char *http_host;
	char *http_path; //path on server
	char *none="";	// empty string
	int iPort;
	
	struct sockaddr_in server;  
	struct hostent *host;

	if (WSAStartup(MAKEWORD(1,1),&lpWSAData)!=0) 
		return(1);
	
	// use default port number - 80 if not specified other 
	strcpy(szHlp,url);						
	pch = strchr((char*)szHlp,':');
	// port not defined in passed URL
	if (pch==NULL) {	
		iPort = 80;
	}
	// port defined in passed URL
	else {		
		pch[0] = '\0';  // truncate port from URL
		iPort = atoi(++pch);
		if(iPort == 0) iPort = 80;
	}

	// separate server name from path on server
	pch = strchr((char*)szHlp,'/');
	if (pch!=NULL) {
		pch[0] = '\0';
		http_path=pch+1;
	}
	else {
		http_path=none;
	}

	http_host=szHlp;

	sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (sClient==INVALID_SOCKET)
		return(2);

	host = gethostbyname(szHlp);
	CopyMemory(&server.sin_addr, host->h_addr_list[0],
            host->h_length);

	server.sin_family = AF_INET;
	server.sin_port = htons(iPort);
	// establish a connection with socket 's'
  if (connect(sClient, (struct sockaddr *)&server,sizeof(server)) == SOCKET_ERROR)
		return(4);
 
	strcpy(szQuery,"GET /");
	strcat(szQuery,http_path);
	strcat(szQuery," HTTP/1.1\nHost: ");
	strcat(szQuery,http_host);
	strcat(szQuery,"\nUser-agent: ");
	strcat(szQuery,http_user_agent);
	strcat(szQuery,"\nAccept: */*\n\n");

	printf("%s",szQuery);

	// send request
	if (!SendString(sClient,szQuery))     
	  return(5);
    
	// receive response
	char *str=GetString(sClient);	  

	return(0);
	}


//
// routine for send request in 'str' to socket in 's'
//
bool SendString(SOCKET sClient,char* str) 
{
	int cnt = send(sClient,str,strlen(str),0);
	if (cnt == SOCKET_ERROR) return(false); else return(true);
}

//
// routine for receive entire information from 's'
// socket and store it in 'Rec' buffer
//
char* GetString(SOCKET sClient) 
{
	char *str;
	char InBuff[2048];
	int cnt;
	DWORD dwpoint;
	
	strcpy("",Rec);
	while (cnt!=0) {
        // clear InBuff - fill 2048 bytes to NULL
        memset(&InBuff,0,2048);
        // receive a 2048 bytes from 's' sock
	    cnt = recv (sClient, (char*)&InBuff, sizeof(InBuff),0);	
		WriteFile(hFile,InBuff, sizeof(InBuff)-1, &dwpoint, NULL);
		// append it to main buffer 'Rec'
		strcat(Rec,InBuff);
	}
	return((char*)&Rec);
}

void CloseURL(void) {
	WSACleanup();
}

-------
Ehhh.. what's up, doc?..


Отправлено: 21:20, 07-03-2005 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » нужен с++ код для посылки пакета данных в инет

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
EventID - Код: 6006 , код: 6009, код: 6005. Источник - Eventlog. Panathinaikos Устранение критических ошибок Windows 6 15-04-2010 16:22
[решено] Нужен код ссылки чтобы открывалось два окна при нажатии на нее QUMATOZ Вебмастеру 2 27-04-2009 13:31
Программы для посылки сообщений musician Программное обеспечение Windows 3 25-05-2008 19:46
LPT-LPT+кабельный модем нужен инет W98 ZXFlanker Сетевые технологии 2 03-08-2005 09:32
нужен код Trojn Вебмастеру 3 01-10-2004 18:52




 
Переход