Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Server -> mehrere Anfragen von Clienten gleichzeitig be..

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 11.02.2010, 21:01    Titel: Server -> mehrere Anfragen von Clienten gleichzeitig be.. Antworten mit Zitat

Hallo zusammen,
gibt es eine Möglichkeit, Anfragen von Clienten gleichzeitig zu bearbeiten.
Mein Code arbeitet erst eine if Abfrage ab.
Während dieser Zeit kommt aber schon die nächste Anfrage eines anderen Clienten.
Nun muss dieser Client aber warten, bis die if Abfrage abgearbeitet wurde.

Das Hauptprogramm befindet sich in einer Dauerschleife do loop.


Hoff ihr könnt mir helfen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 11.02.2010, 21:06    Titel: Antworten mit Zitat

Hallo,

statt mit einer großen Ereignisschleife im Hauptprogramm könntest du mit mehreren Threads (sozusagen parallel laufende SUBs) arbeiten, die gleichzeitig auf Anfragen von Clients warten und diese dann entsprechend verarbeiten. In der Befehlsreferenz finden sich dazu weitere Informationen etwa unter THREADCREATE und THREADWAIT.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 11.02.2010, 21:18    Titel: Antworten mit Zitat

Code:

screenres 300,300,32
#include "netwin.bi"
'server.bas
Dim  As  Any  Ptr  i,ii,iii

Sub  MyThread ()
Dim As FDSOCKET hServer,hClient
Dim As SOCKADDR serveraddr
Dim As SOCKADDR clientaddr
Dim As WSADATA  wsdata
Dim As Ubyte Ptr lpBuffer
Dim As Integer  addrsize,ret


ret=WSAStartup(VERSION_11,@wsdata)
If ret<>0 Then
  ? "server error: WSAStartup!"
  Sleep:End -1   
End If

With serveraddr
  .sin_family =AF_INET
  .sin_port   =build_port(40000)
  .sin_addr   =INADDR_ANY
End With

hServer=NetSocket(AF_INET,SOCK_STREAM)
If hServer<0 Then
  ? "server error: socket!"
  WSACleanup
  Sleep:End -1
Endif
AddrSize=sizeof(SOCKADDR)
ret=NetBind(hServer,@Serveraddr,@AddrSize)
If ret<0 Then
  ? "server error: bind!"
  NetClose(hServer)
  WSACleanup
  Sleep:End -1
End If

ret=NetListen(hServer)
If ret<0 Then
 ? "server error: listen!"
  NetClose(hServer)
  WSACleanup
  Sleep:End -1
End If
Do
Print "server: wait on client"
hClient=-1
While (hClient<0) And (Len(Inkey)=0)
  hClient=NetAccept(hServer,@clientaddr,@AddrSize)
Wend
dim message as string
ret=NetReciveString(hClient,message)

If message ="HALLO" Then
  Print "send message to client"
  NetSendString(hClient,"Hallo zurück")
Else
 ? "server error: NetSendString!"
End If
Loop
End Sub

Sub  MyThread1 ()
Dim As FDSOCKET hServer,hClient
Dim As SOCKADDR serveraddr
Dim As SOCKADDR clientaddr
Dim As WSADATA  wsdata
Dim As Ubyte Ptr lpBuffer
Dim As Integer  addrsize,ret


ret=WSAStartup(VERSION_11,@wsdata)
If ret<>0 Then
  ? "server error: WSAStartup!"
  Sleep:End -1   
End If

With serveraddr
  .sin_family =AF_INET
  .sin_port   =build_port(40000)
  .sin_addr   =INADDR_ANY
End With

hServer=NetSocket(AF_INET,SOCK_STREAM)
If hServer<0 Then
  ? "server error: socket!"
  WSACleanup
  Sleep:End -1
Endif
AddrSize=sizeof(SOCKADDR)
ret=NetBind(hServer,@Serveraddr,@AddrSize)
If ret<0 Then
  ? "server error: bind!"
  NetClose(hServer)
  WSACleanup
  Sleep:End -1
End If

ret=NetListen(hServer)
If ret<0 Then
 ? "server error: listen!"
  NetClose(hServer)
  WSACleanup
  Sleep:End -1
End If
Do
Print "server: wait on client"
hClient=-1
While (hClient<0) And (Len(Inkey)=0)
  hClient=NetAccept(hServer,@clientaddr,@AddrSize)
Wend
dim message as string
ret=NetReciveString(hClient,message)

If message ="HALLO" Then
  Print "send message to client"
  NetSendString(hClient,"Hallo zurück")
Else
 ? "server error: NetSendString!"
End If
Loop
End Sub
i = ThreadCreate(Cast(Any  Ptr,@MyThread))
ThreadWait  (i)
ii = ThreadCreate(Cast(Any  Ptr,@MyThread1))
ThreadWait  (ii)





WSACleanup
sleep


so zum Beispiel?
Wäre für einen kleinen Beispielscode dankbar

Cu Andy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 12.02.2010, 13:26    Titel: Antworten mit Zitat

Kein Kommentar...sieht wohl aus, dass ich da was falsch gemacht habe durchgeknallt

Cu Andy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 12.02.2010, 15:52    Titel: Antworten mit Zitat

Faul.
http://c-worker.ch/tuts/select.php

Und hier ist es sogar noch besser dokumentiert: http://zotteljedi.de/
Das musst du aber selber auf der Seite finden!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 12.02.2010, 17:53    Titel: Antworten mit Zitat

Danke für die Antwort @2...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz