Seite 1 von 1
[gelöst] Purebasic - Linux 4.10 Demo - Server Problem
Verfasst: 11.02.2008 06:42
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?
Verfasst: 11.02.2008 07:59
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 ?
Verfasst: 11.02.2008 08:06
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...
Verfasst: 11.02.2008 08:19
von edel
Wo bekommst du den denn und welche einstellung benutzt du (unicode usw) ?
Verfasst: 11.02.2008 08:30
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
Verfasst: 11.02.2008 11:40
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

Verfasst: 12.02.2008 19:15
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
