Seite 1 von 1

Kommunikation mit TCP-Server funktioniert nicht wie erwartet

Verfasst: 13.11.2014 18:02
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

Re: Kommunikation mit TCP-Server funktioniert nicht wie erwa

Verfasst: 13.11.2014 18:25
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

Re: Kommunikation mit TCP-Server funktioniert nicht wie erwa

Verfasst: 13.11.2014 18:31
von Shamos
Oh man, da sieht man mal was +10 Jahre Programmier-Abstinenz anrichten können :)
Danke für den kleinen Schubser ^^

Re: Kommunikation mit TCP-Server funktioniert nicht wie erwa

Verfasst: 13.11.2014 18:36
von Kiffi
P.S.: Falsches Forum, Nic ;-)

Re: Kommunikation mit TCP-Server funktioniert nicht wie erwa

Verfasst: 13.11.2014 23:22
von NicTheQuick
Kiffi hat geschrieben:P.S.: Falsches Forum, Nic ;-)
Wo? :mrgreen:

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