[gelöst] Purebasic - Linux 4.10 Demo - Server Problem

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

[gelöst] Purebasic - Linux 4.10 Demo - Server Problem

Beitrag von Blackskyliner »

Hallo.
Ich habe folgende Procedure:

Code: Alles auswählen

Procedure T1() ;#ChatServer
	;Protected *Buffer
	*Buffer = AllocateMemory(1024)
	Repeat
		NEvent = NetworkServerEvent()
		If NEvent
			If EventServer() = #ChatServer
				Debug "ChatServer: Event occurred"
				;ReceiveNetworkData()
				Select NEvent
					Case #PB_NetworkEvent_Connect
						Debug "ChatServer: Client connected"
					Case #PB_NetworkEvent_Data
						Debug "ChatServer: Client send Data"
						ReceiveNetworkData(ConnectionID(#ChatServer), *Buffer, 1000)
					Case #PB_NetworkEvent_File
						ReceiveNetworkFile(ConnectionID(#ChatServer),"temp.tmp")
						DeleteFile("temp.tmp")
					Case #PB_NetworkEvent_Disconnect
						Debug "ChatServer: Client disconnected"
				EndSelect
			EndIf
		EndIf 
		Delay(1)
	ForEver
	
EndProcedure
Diese führe ich mit ThreadCreate(@T1(),0) aus.

Das Problem hierbei ist jetzt, das ich bei eingehendem Datenverkehr einen "Invalid memory access" bekomme.

Weiß jemand woran das liegt?
Zuletzt geändert von Blackskyliner am 12.02.2008 19:27, insgesamt 1-mal geändert.
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Funktionen die mit Createthread aufgerufen werden, mussen einen
Parameter besitzen. Solangsam sollte das doch nun bekannt sein...
Oder fragt sich sonst niemand woefuer der 2 Parameter, bei
Createthread, gut ist ?
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag von Blackskyliner »

Ok, ich bin nicht ganz so aktiv in diesem Forum und arbeite noch nicht allzu lange mit Threads, von daher werde ich das ab heute ändern und einen Dummy Parameter einbauen, obwohl es ja auch so läuft.

Aber das löst noch immer nicht mein Problem mit dem Invalid Memory Access...
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Wo bekommst du den denn und welche einstellung benutzt du (unicode usw) ?
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag von Blackskyliner »

Beispiel

Server.pb

Code: Alles auswählen


Enumeration
	#ChatServer
EndEnumeration


InitNetwork()

CreateNetworkServer(#ChatServer, 5001)
Procedure NetworkCleanup()
	CloseNetworkServer(#ChatServer)
EndProcedure

Procedure T1(DummyParam.l) ;#ChatServer
	;Protected *Buffer
	*Buffer = AllocateMemory(1024)
	Repeat
		NEvent = NetworkServerEvent()
		If NEvent
			If EventServer() = #ChatServer
				Debug "ChatServer: Event occurred"
				;ReceiveNetworkData()
				Select NEvent
					Case #PB_NetworkEvent_Connect
						Debug "ChatServer: Client connected"
					Case #PB_NetworkEvent_Data
						Debug "ChatServer: Client send Data"
						Test = ReceiveNetworkData(ConnectionID(#ChatServer), *Buffer, 1000)
					Case #PB_NetworkEvent_File
						ReceiveNetworkFile(ConnectionID(#ChatServer),"temp.tmp")
						DeleteFile("temp.tmp")
					Case #PB_NetworkEvent_Disconnect
						Debug "ChatServer: Client disconnected"
				EndSelect
			EndIf
		EndIf 
		Delay(1)
	ForEver
	
EndProcedure

NoServerWindow = 0

If OpenWindow(0,0,0,500,500,"Server Monitor")
	If CreateGadgetList(WindowID(0))
		TextGadget(11,100,5,250,30, "Chat Server")
		ListViewGadget(1,0,45,500,455)
	Else
		NoServerWindow = 1
	EndIf
Else
	NoServerWindow = 1
EndIf

If NoServerWindow
	MessageRequester("Error", "Server Monitor window could not be created (It is not necessary, server WILL run)")
EndIf

ChatServerThread = CreateThread(@T1(),0)

Repeat
	If NoServerWindow <> 1
		WEvent = WindowEvent()
		Select WEvent
			Case #PB_Event_CloseWindow
				If ChatServerThread
					KillThread(ChatServerThread)
				EndIf
				NetworkCleanup()
				End
		EndSelect
	EndIf
	Delay(1)
ForEver
Client.pb

Code: Alles auswählen

InitNetwork()

ChatServer = OpenNetworkConnection("127.0.0.1",5001)

SendNetworkString(ChatServer, "Hallo ChatServer")

If ChatServer
	CloseNetworkConnection(ChatServer)
EndIf

Settings:

; IDE Options = PureBasic 4.10 (Linux - x86)
; CursorPosition = 226
; FirstLine = 84
; Folding = 5-
; EnableThread
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

CreateNetworkServer() im Thread aufrufen. Eigene Instance!

Schau dir mal dies an
http://www.purebasic.fr/german/viewtopi ... =varserver

gibt noch mehr unter
http://home.arcor.de/m_kastner/MyCodes/PB4/

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag von Blackskyliner »

Löst das Problem immer noch nicht :(
Wieder an der gleichen Stelle ein "Invalid Memory Access"

Code: Alles auswählen

ReceiveNetworkData(ConnectionID(#ChatServer), *Buffer, 1000)

EDIT: Es passiert ja sogar, wenn ich es nicht in einem Thread auslagere.

Ist das ein Bug von der Linux 4.10 Demo?


EDIT2: Oh mein Gott bin ich doof.... ich muss doch EventClient() nehmen und nicht ConnectionID().

Hat sich erledigt :D
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
Antworten