webForumDet fria alternativet

öppna sida

C/C++

5 svar · 284 visningar · startad av benken

Medlem sedan feb. 2003250 inlägg
Frågan#1

Hur ska man göra så ett c/c++ program öppnarn websida? Jag vill bara att en php sida körs. Inte ha den. I vb kan man ju använda inet1.openurl men finns det inte nåt sånt i c++? Ska va i linux med.

Medlem sedan maj 20002 993 inlägg
Medlem sedan juni 20022 599 inlägg
#3

Kortast tänkbara "fulkod" för att anropa en PHP-sida:

#include <winsock.h>
int main(int argc, char* argv[])
{
	struct sockaddr_in A;
	WSADATA W; SOCKET S;
	struct hostent *H; char R[1000]; int i ;
	WSAStartup (0x101,&W);
	S = socket(AF_INET, SOCK_STREAM,0);
	A.sin_family=AF_INET;
	A.sin_port = htons(80);
	H=gethostbyname("www.dindomän.se");
	A.sin_addr.s_addr=*((unsigned long *) H->h_addr);
	i=connect(S,(struct sockaddr *) &A,sizeof(A));
	strcpy(R,"GET /sökväg/dinsida.php  \r\nHost: [url]www.dindomän.se\r\n\r\n[/url]");
	i=send(S,R,strlen(R),0);
	return 0;
}

Du måste referera till WSOCK32.LIB vid länkningen. Koden borde kompilera på Linux också med ett par ändringar.

Medlem sedan feb. 2003250 inlägg
#4

ok

Medlem sedan feb. 2003250 inlägg
#5

Det funka inte, fick 7 fel. Åså funkar detj u inte för linux...

Medlem sedan juni 20022 599 inlägg
#6

7 fel? Du får ursäkta, men min telepatiska förmåga är lite nedsatt idag (pga förkylning). Vad för fel? Kompileringsfel? Länkningsfel? Lade du till WSOCK32.LIB? Project->Settings->Link->Object Library Modules (om du använder VS).

Åså funkar detj u inte för linux...

Nä, jag vet. Som jag skrev så var det Windowskod. Jag trodde du bara efterlyste själva principen.

Så här blir det på Linux (koden är lite längre och snyggare eftersom jag tagit den ur en bok):

#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <errno.h>
#include <arpa/inet.h>
#define PROTOCOL "tcp"
#define REQUEST "GET /sökväg/dinsida.php \nHost: [url]www.dindomän.se\n\n[/url]"

int main(int argc, char *argv[]) {
  int sockid;
  struct servent *serviceaddr;
  struct hostent *hostaddr;
  struct protoent *protocol;
  struct sockaddr_in socketaddr;
  char buffer[1024];
  int count;
  bzero((char *) &socketaddr, sizeof(socketaddr));
  socketaddr.sin_family = AF_INET;
  serviceaddr = getservbyname("http", PROTOCOL);
  socketaddr.sin_port = serviceaddr->s_port;
  hostaddr = gethostbyname("www.dindomän.se");
  memcpy(&socketaddr.sin_addr, hostaddr->h_addr, hostaddr->h_length);
  protocol = getprotobyname(PROTOCOL);
  sockid = socket(PF_INET, SOCK_STREAM, protocol->p_proto);
  connect(sockid, &socketaddr, sizeof(socketaddr));
  write(sockid, REQUEST, strlen(REQUEST));
  return 0;
}

Vill du sen ha kod som du kan köra rakt av både på Windows och Linux så kanske Java eller Perl kan vara alternativ?

272 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)