  | 
					
						Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!   
						
						
					 | 
				 
			 
			 
	
		| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen   | 
	 
	
	
		| Autor | 
		Nachricht | 
	 
	
		Andy19312
 
 
  Anmeldungsdatum: 22.10.2005 Beiträge: 428
 
  | 
		
			
				 Verfasst am: 11.02.2010, 20:01    Titel: Server -> mehrere Anfragen von Clienten gleichzeitig be.. | 
				     | 
			 
			
				
  | 
			 
			
				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 | 
		 | 
	 
	
		  | 
	 
	
		Sebastian Administrator
  
  Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
  | 
		
			
				 Verfasst am: 11.02.2010, 20:06    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				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 | 
		 | 
	 
	
		  | 
	 
	
		Andy19312
 
 
  Anmeldungsdatum: 22.10.2005 Beiträge: 428
 
  | 
		
			
				 Verfasst am: 11.02.2010, 20:18    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 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 | 
		 | 
	 
	
		  | 
	 
	
		Andy19312
 
 
  Anmeldungsdatum: 22.10.2005 Beiträge: 428
 
  | 
		
			
				 Verfasst am: 12.02.2010, 12:26    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Kein Kommentar...sieht wohl aus, dass ich da was falsch gemacht habe   
 
 
Cu Andy | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		28398
 
 
  Anmeldungsdatum: 25.04.2008 Beiträge: 1917
 
  | 
		 | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Andy19312
 
 
  Anmeldungsdatum: 22.10.2005 Beiträge: 428
 
  | 
		
			
				 Verfasst am: 12.02.2010, 16:53    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				| Danke für die Antwort @2... | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
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.
  | 
   
 
     |