/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Sokker til Linux via HTTP.2 Hvordan sende~
Fra : Jimmy


Dato : 16-01-02 01:20

Til et skoleprojekt er jeg ved at skrive en lille søgemaskine server.
Jeg forsøger at hardcode index.html men ved ikke hvad der skal til for at
klient browseren (f.eks. IE eller Navigator) opdager EOF.
F.eks. Navigator melder "stalled", der kommer ikke "Done" i status linien.

Nogle forslag?

char *start = "HTTP/1.0 200 OK Content-Type: text/html \n\n";

char *index = "<html><head><title>Gruppe1 - Søgemaskine</title><meta
content=\"\"><style></style></head><body>Velkommen til vores internet
søgemaskine<br><form method=\"get\" action=\"\">Indtast venligst søgeord og
tryk søg<br><br><input type=\"text\" name=\"emneord\" size=255><input
type=submit value=\" - SØG - \"></form></body></html>";

send(new_socket,start,strlen(start),0);
send(new_socket,index,strlen(index),0);

Selve socken ser således ud:

socket_desc=socket(AF_INET,SOCK_STREAM,0);
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(our_port);
if (bind(socket_desc, (struct sockaddr *)&address, sizeof(address)))

while(1)
{
listen(socket_desc,5)
addrlen = sizeof(struct sockaddr_in);
new_socket = accept(socket_desc, (struct sockaddr *)&address,
(socklen_t *) &addrlen))
};





 
 
Christian Hemmingsen (16-01-2002)
Kommentar
Fra : Christian Hemmingsen


Dato : 16-01-02 01:55

"Jimmy" <longgaard@hotmail.com> writes:

> Til et skoleprojekt er jeg ved at skrive en lille søgemaskine server.
> Jeg forsøger at hardcode index.html men ved ikke hvad der skal til for at
> klient browseren (f.eks. IE eller Navigator) opdager EOF.
> F.eks. Navigator melder "stalled", der kommer ikke "Done" i status linien.
>
> Nogle forslag?
>
> char *start = "HTTP/1.0 200 OK Content-Type: text/html \n\n";

Her har du jo allerede tabt. RFC2616 siger at man skal bruge
det der populært bliver kaldt "network linebreaks", dvs. CR LF, henholdsvis
ASCII 13 og 10.
Så når du skal lave en ny linje i dine Headers, så skal du sige "\r\n".

Desuden synes jeg ikke jeg kan se at du lukker forbindelsen når du har
sendt dit svar, så det er ikke så underligt at dine browsere ikke
detecter EOF...

--
Christian Hemmingsen

Martin Dyring (16-01-2002)
Kommentar
Fra : Martin Dyring


Dato : 16-01-02 08:30

"Christian Hemmingsen" <postmaster@hemmingsen.nospam.kampsax.k-net.dk> wrote
in message news:m2ofjvi08k.fsf@kewl.kampsax.dtu.dk...
> "Jimmy" <longgaard@hotmail.com> writes:
[snip]
> Desuden synes jeg ikke jeg kan se at du lukker forbindelsen når du har
> sendt dit svar, så det er ikke så underligt at dine browsere ikke
> detecter EOF...

Der udover mangler der linjeskift efter HTTP status koden. Dvs. det skal
ende med at se sådan her ud:

char *start = "HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n";

Samtidigt skal man bemærke at send() ikke nødvendigvis sender hele bufferen
men returnerer det antal bytes der er "sendt". Altså skal man lave noget i
stil med:

unsigned size = strlen(data);
for(unsigned sent = 0; sent < size; )
{
unsigned result = send(socket, data + sent, size - sent);
if(result == 0)
{
// Ikke godt.. Forbindelsen smidt?
}
else
sent += result;
}

Og overstående er (hvis nogen skulle være i tvivl :) utestet.

--
Mvh,
Martin Dyring



Benny Andersen (17-01-2002)
Kommentar
Fra : Benny Andersen


Dato : 17-01-02 01:17

Hej Jimmy

I tillæg til de andre gode råd, vil jeg nævne response headerne: Content-Length og Connection
Content-Length, giver sig selv og der skal være overensstemmelse mellem
   Connection: close
og serverens nedlukning af TCP forbindelse, eller
   Connection: keep-alive
og serverens opretholdelse af samme.

Men det er meget let at lure af hvis du finder en webclient som viser responce headere, og anvender denne overfor en 'rigtig' webserver. Du
kan f.eks anvende wget (open source), eller hvis du har java sdk installeret, webclient fra http://www.coreservlets.com.

By the way: socket kan (dog ikke netværk kommunikationsmæssigt) oversættes til bøsning, det har intet med sokker at gøre. (Eller er der
noget jeg ikke har forstået?)

---
Benny Andersen
Som dog ikke lige ved hvad en client under linux forventer af HTTP.2

Byrial Jensen (17-01-2002)
Kommentar
Fra : Byrial Jensen


Dato : 17-01-02 20:01

Benny Andersen <be99@worldonline.dk> skrev:
> Hej Jimmy
>
> I tillæg til de andre gode råd, vil jeg nævne response headerne:
> Content-Length og Connection

Disse headere hører til HTTP/1.1. Der var vist tale om HTTP/1.0
i den kode som så vi.

Benny Andersen (17-01-2002)
Kommentar
Fra : Benny Andersen


Dato : 17-01-02 21:47

On Thu, 17 Jan 2002 19:00:54 GMT, Byrial Jensen <bjensen@nospam.dk> wrote:

>Benny Andersen <be99@worldonline.dk> skrev:
>> Hej Jimmy
>>
>> I tillæg til de andre gode råd, vil jeg nævne response headerne:
>> Content-Length og Connection
>
>Disse headere hører til HTTP/1.1. Der var vist tale om HTTP/1.0
>i den kode som så vi.
OK, det var jeg faktisk ikke klar over, og ja, RFC1945 (HTTP/1.0) nævner, så vidt jeg kan se, kun Content-Length som mulig en request
header.

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste