Hallo!
Ich habe ein recht einfaches Problem, sitze aber schon eine Weile dran und bekomm keine fernünftige Lösung:
Ich habe einen Winsock client und server gemacht. Das Ganze funktioniert einwandfrei, ich kann mit send() und recv() Daten verschicken. Das Problem ist aber, dass recv() ein blocking Call ist. Nun steht die Anweisung aber in einer WinAPI und der ganze Rest vom Probgramm bleibt stehen, bis die andere Anwendung Daten zurückschickt.
Das soll natürlich nicht passieren. Ich hatte mir das nach dem Muster vorgestellt:
Jede Sekunde gucken, ob Daten angekommen sind - Wenn nicht, auch gut und weiter im (Quell)text.
Ich hab das schon versucht wie hier:
http://overholt.thinkhost.com/tutorials/winsock/#Section7
Aber bei der Lösung wird bei mir scheinbar HandleData(wParam, lParam) nie aufgerufen.
Ich hab auch schon einen eigenen Lösungsansatz versucht:
Hier habe ich jetzt einen Timer eingebaut, der aus t1 und t2 immer den Zeitabstand zur letzten Abfrage berechnet. Danach werden die Daten ausgelesen und in eine Listbox geschrieben. Der Server sendet dabei IMMER einzelne Rautezeichen, sozusagen als KeepAlive. Aber selbst dabei hängt das Programm manchmal. (aber zumindest alle 30sek für ca 5 sek)
Außerdem hat es den Nachteil, dass ich im Nachhinein die Rautezeichen aus der tatsächlich interessanten Nachricht rausfiltern muss.
Ich habe ein recht einfaches Problem, sitze aber schon eine Weile dran und bekomm keine fernünftige Lösung:
Ich habe einen Winsock client und server gemacht. Das Ganze funktioniert einwandfrei, ich kann mit send() und recv() Daten verschicken. Das Problem ist aber, dass recv() ein blocking Call ist. Nun steht die Anweisung aber in einer WinAPI und der ganze Rest vom Probgramm bleibt stehen, bis die andere Anwendung Daten zurückschickt.
Das soll natürlich nicht passieren. Ich hatte mir das nach dem Muster vorgestellt:
Jede Sekunde gucken, ob Daten angekommen sind - Wenn nicht, auch gut und weiter im (Quell)text.
Ich hab das schon versucht wie hier:
http://overholt.thinkhost.com/tutorials/winsock/#Section7
Aber bei der Lösung wird bei mir scheinbar HandleData(wParam, lParam) nie aufgerufen.
Ich hab auch schon einen eigenen Lösungsansatz versucht:
Code:
t2=clock();
timex=((float)(t2-t1)/CLOCKS_PER_SEC);
if (timex>3)
{
t1=clock();
lene=recv(s,empfangen,256,1);
empfangen[lene]='\0';
if ((lene != SOCKET_ERROR)){(int)SendMessage(hListbox, LB_ADDSTRING, 0, (LPARAM) empfangen);
}
Außerdem hat es den Nachteil, dass ich im Nachhinein die Rautezeichen aus der tatsächlich interessanten Nachricht rausfiltern muss.