Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
12.03.2002, 09:34
apfelkorn



Hm. Da ich euch nicht ohne Arbeit lassen kann, hier meine nächste Frage.
Ich bin zurzeit am very basic of winsock, sozusagen. Ich habe also alles soweit aufgestellt und einen server und einen client. beide haben selbe ports etc.
Wenn ich jetzt meinen Server starte (ein win-fenster ist das zu kontrolle), dann bleibt der hängen (ich benutze einen server auf udp-basis, also mit recvfrom und sendto). d.h. er hält anscheinend genau auf der recvfrom-funktion an. Schicke ich allerdings von meinem client an den server irgendwelche daten, dann geht der server weiter in seinen anweisungen und führt den rest der schleife aus. Dann ist der auch wieder für den bruchteil einer sekunde wieder anzusprechen. ich rufe das recvfrom jede schleife auf. Was muss ich machen, damit trotz der recvfrom-anweisung der nicht dauernd hängenbleibt oder damit ich weiß, wann ich eine recvfrom-anweisung aufrufen muss (also falls was am port angekommen ist, dann rufe recvfrom auf nur das falls was angekommen ist, da weiß ich absolut keine anweisung zu...)

Wisst ihr da vielleicht was?

--

zum Seitenanfang zum Seitenende Profil || Suche
001
12.03.2002, 11:08
Tron



das ist ganz einfach:

UByte RecvBuffer[576];
UTetra RecvSize;
UByte Src[16];
UInt SrcSize;
while (was_auch_immer)
{
..ioctlsocket(Socket, FIONREAD, &RecvSize);
..if (RecvSize)
..{
....SrcSize = sizeof(Src);
....RecvSize = recvfrom
....(
......Socket,
......(Char*)RecvBuffer,
......sizeof(RecvBuffer),
......0,
......(sockaddr*)Src,
......(Int*)&SrcSize
....);
....// verarbeitung der erhaltenen message
..}
}

<edit>wenn man fragen darf: was willst du fuer ein proggi machen?</edit>
<edit2>meine typedefs: www.uni-karlsruhe.de/~za2279/files/Types.h, bei der namensgebung halte ich mich an D.E. Knuth</edit2>

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett


Dieser Beitrag wurde am 12.03.2002 um 11:21 von Tron bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
12.03.2002, 11:24
apfelkorn



ich bin zur zeit vorallem mit client-server technologien am experimentieren, aber auch mit winsock. ich wollte vorallem eine art universalprotokoll für meine persönlichen belange entwickeln :)

danke

[edit]
Es funktioniert super, jetzt wäre da nur ein klitzekleines problem übrig:
Der hat ne ganz schöne Wartezeit, das kommt eigentlich nicht so gut, wie kann man das beschleunigen, bzw. warum wartet der solange bis er das verarbeitet hat?
[edit2]
problem hat sich schon gelöst:
Der Server verfällt, wenn er nicht aktiviert ist, in einen Schlafmodus. Wie kann ich das verhindern?

--


Dieser Beitrag wurde am 12.03.2002 um 11:34 von apfelkorn bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
12.03.2002, 14:20
apfelkorn



Es lag an meiner Hauptschleife. Ich hatte GetMessage benutzt, und das hatte blockiert. Für alle zum reinschauen:

while ( ServerLoop )
{
while (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if (msg.message == WM_QUIT)
ServerLoop = FALSE;

TranslateMessage(&msg);
DispatchMessage(&msg);
}

// Schleifenaufgaben...
}

Das ist die Richtige lösung

--

zum Seitenanfang zum Seitenende Profil || Suche