Kommunikation mit TCP-Server funktioniert nicht wie erwartet

Für allgemeine Fragen zur Programmierung mit PureBasic.
Shamos
Beiträge: 32
Registriert: 12.11.2014 09:44

Kommunikation mit TCP-Server funktioniert nicht wie erwartet

Beitrag von Shamos »

Hallo Gemeinde,
ich habe soeben zu Test-Zwecken einen kleinen TCP-Client erstellt,
mit der Absicht mich einfach mal mit einem HTTP-Server zu verbinden
und das geballte RAW HTTP bzw. mittels eines einfachen HTTP Befehls
den Inhalt einer Webseite zu empfangen. Doch irgendwas klappt da nicht!

Wenn ich den unten stehenden Code ausführe, funktioniert dieser an sich wunderbar
endet jedoch leider mit dem implementierten Timeout, ohne das ich irgendwelche
Daten von der Webseite erhalten habe, und obwohl es eine Verbindung gegeben hat.

Nun frage ich mich, wieso ist das so? Was habe ich evtl übersehen bzw falsch gemacht

Code: Alles auswählen

;;; Shamos Client Example
;;; TAB SIZE = 3

c=0
Port 			= 21172
BufferSize	= 2048
*Buffer		= AllocateMemory(BufferSize)

OpenConsole("Shamos CLIENT Example")
EnableGraphicalConsole(1)
ConsoleColor(0,7)
ClearConsole()

PrintN(  "This is an Shamos Client Example"  )
PrintN("")

If InitNetwork() <> 0
	ConnectionID = OpenNetworkConnection(  "google.de", 80  )
	If ConnectionID
		PrintN(  "Connected to Server"  )
		SendNetworkString(  ConnectionID, "GET /index.html HTTP/1.1", #PB_UTF8  )
		PrintN("")

		Repeat
			CEvent = NetworkClientEvent(ConnectionID)
		
			Select CEvent
			
				Case #PB_NetworkEvent_Data
					bs = ReceiveNetworkData(  ConnectionID, *Buffer, BufferSize  )
					If bs<>0 
						PrintN(  "SERVER has send a packet with "+Str(bs)+" Characters."  )
						PrintN(  "=============[BEGIN]=============" );
						PrintN(  PeekS(  *Buffer, bs , #PB_UTF8  )  )
						PrintN("")
						PrintN(  "==============[END]==============" );
	  					ServerQuit = 1
					EndIf
				
  				Case #PB_NetworkEvent_Disconnect
  					ServerQuit = 1
  					PrintN(  "Server has Terminated the Connection"  )
  			
  			EndSelect
  			
  			c+1
  			If c>2000
  				PrintN(  "TIMEOUT"  )
  				ServerQuit = 1
  			EndIf
  			
			Delay(1)		
		Until ServerQuit = 1
		CloseNetworkConnection(  ConnectionID  )
		
		
	Else
		PrintN(  "Can't Connect to the Server - Server not reachable."  )
	EndIf

Else;InitNetwork
	PrintN( "Can't initialize the network !" )
EndIf;InitNetwork
  
  

PrintN("")
PrintN(  "<<<<<< PROGRAM END - PRESS [ENTER] TO CONTINUE >>>>>>"  )
Input()
ConsoleColor(7,0)
ClearConsole()
CloseConsole()
End
Windows 8.1 x64 | PureBasic 5.31 x64 | Dell Inspiron 3847 | i5-4440 3.1Ghz | 8GB DDR3 | Nvidia Geforce 625
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Kommunikation mit TCP-Server funktioniert nicht wie erwa

Beitrag von NicTheQuick »

Dein HTTP-Request ist falsch. Du musst mindestens noch den Host angeben und mit Carriage Return und Linefeed abschließen:

Code: Alles auswählen

;;; Shamos Client Example
;;; TAB SIZE = 3

c=0
Port          = 21172
BufferSize   = 2048
*Buffer      = AllocateMemory(BufferSize)

OpenConsole("Shamos CLIENT Example")
EnableGraphicalConsole(1)
ConsoleColor(0,15)
ClearConsole()

PrintN(  "This is an Shamos Client Example"  )
PrintN("")

If InitNetwork() <> 0
	ConnectionID = OpenNetworkConnection(  "google.de", 80  )
	If ConnectionID
		PrintN(  "Connected to Server"  )
		connectString.s = "GET /index.html HTTP/1.1" + #LF$ +
		                  "Host: www.google.de" + #LF$ +
		                  #CRLF$
		SendNetworkString(  ConnectionID, connectString, #PB_UTF8  )
		PrintN("")
		
		Repeat
			CEvent = NetworkClientEvent(ConnectionID)
			
			Select CEvent
					
				Case #PB_NetworkEvent_Data
					bs = ReceiveNetworkData(  ConnectionID, *Buffer, BufferSize  )
					If bs<>0
						PrintN(  "SERVER has send a packet with "+Str(bs)+" Characters."  )
						PrintN(  "=============[BEGIN]=============" );
						PrintN(  PeekS(  *Buffer, bs , #PB_UTF8  )  )
						PrintN("")
						PrintN(  "==============[END]==============" );
						ServerQuit = 1
					EndIf
					
				Case #PB_NetworkEvent_Disconnect
					ServerQuit = 1
					PrintN(  "Server has Terminated the Connection"  )
					
			EndSelect
			
			c+1
			If c>2000
				PrintN(  "TIMEOUT"  )
				ServerQuit = 1
			EndIf
			
			Delay(1)      
		Until ServerQuit = 1
		CloseNetworkConnection(  ConnectionID  )
		
		
	Else
		PrintN(  "Can't Connect to the Server - Server not reachable."  )
	EndIf
	
Else;InitNetwork
	PrintN( "Can't initialize the network !" )
EndIf;InitNetwork



PrintN("")
PrintN(  "<<<<<< PROGRAM END - PRESS [ENTER] TO CONTINUE >>>>>>"  )
Input()
ConsoleColor(7,0)
ClearConsole()
CloseConsole()
End
Shamos
Beiträge: 32
Registriert: 12.11.2014 09:44

Re: Kommunikation mit TCP-Server funktioniert nicht wie erwa

Beitrag von Shamos »

Oh man, da sieht man mal was +10 Jahre Programmier-Abstinenz anrichten können :)
Danke für den kleinen Schubser ^^
Windows 8.1 x64 | PureBasic 5.31 x64 | Dell Inspiron 3847 | i5-4440 3.1Ghz | 8GB DDR3 | Nvidia Geforce 625
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Kommunikation mit TCP-Server funktioniert nicht wie erwa

Beitrag von Kiffi »

P.S.: Falsches Forum, Nic ;-)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Kommunikation mit TCP-Server funktioniert nicht wie erwa

Beitrag von NicTheQuick »

Kiffi hat geschrieben:P.S.: Falsches Forum, Nic ;-)
Wo? :mrgreen:

Das kommt davon, wenn man ausnahmslos die "Neue Beiträge"-Funktion nutzt.
Antworten