Sockets i linux

Tags:    c++ asp

Jeg søger et eksempel på en socket forbindelse i cpp på en linux maskine.

Den jeg har brugt førhen kræver at den kan binde den port den conencter til lokalt ...





5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Jeg søger et eksempel på en socket forbindelse i cpp på en linux maskine.

Den jeg har brugt førhen kræver at den kan binde den port den conencter til lokalt ...



Her er et godt eksempel som jeg selv kigger i en gang i mellem :-)
http://www.linuxgazette.com/issue74/tougher.html



se evt. http://www.poplog.org/docs/popdocs/pop11/unix/socket



Der er også en introduktion i Glibc manualen som alle Linux kodere bør have en reference til så de hurtigt kan slå op:

http://www.gnu.org/manual/glibc-2.2.5/libc.html



Jeg søger et eksempel på en socket forbindelse i cpp på en linux maskine.

Den jeg har brugt førhen kræver at den kan binde den port den conencter til lokalt ...



Forsøg det følgende .. Har skrevet det ud fra hukommelsen, så det kompilerer sikkert ikke, men det burde være nemt lige at rette til ..

Programstumpen connecter til www.udvikleren.dk og udfører en GET..

int Socket = socket(PF_INET, SOCK_STREAM, 0);

if ( Socket < 0 )
exit(1);

hostent* HostInfo = gethostbyname("www.udvikleren.dk");
sockaddr_in SocketAddress = {0};
SocketAddress.sin_family = AF_INET;
SocketAddress.sin_port = htons(80);
SocketAddress.sin_addr.s_addr = ((in_addr*)HostInfo->h_addr)->s_addr;
if ( connect(Socket, (sockaddr*)SocketAddress, sizeof(SocketAddress)) < 0 )
exit(1);

char OutBuffer[] = "GET / HTTP/1.1\\r\\n";
send(Socket, &OutBuffer, sizeof(Buffer), 0);
char InBuffer[255] = {0};
while( recv(Socket, &InBuffer, sizeof(InBuffer), 0) != 0)
{
printf("%s", InBuffer);
memset(&InBuffer, 0, sizeof(InBuffer));
}

shutdown(Socket, 2);





char OutBuffer[] = "GET / HTTP/1.1\\r\\n";
send(Socket, &OutBuffer, sizeof(Buffer), 0);
char InBuffer[255] = {0};
while( recv(Socket, &InBuffer, sizeof(InBuffer), 0) != 0)
{
printf("%s", InBuffer);
memset(&InBuffer, 0, sizeof(InBuffer));
}

shutdown(Socket, 2);


Du bruger HTTP version 1.1 som kræver en Host header og så skal sidste header afsluttes med to linjeskift i HTTP protokollen:


char OutBuffer[] = "GET / HTTP/1.1\\r\\nHost: www.udvikleren.dk\\r\\n\\r\\n";
send(Socket, &OutBuffer, sizeof(Buffer), 0);

Dette burde virke bedre (og ja...jeg ved godt at der ikke blev spurgt til HTTP protokollen...det er kun for at være på tværs) :-)



t