Daten schneller übers Internet austauschen
Speicherbereiche kann man mit SendNetworkFile() nicht verschicken, dafür brauchst du SendNetworkData(). hab ich aber auch schon geschrieben, aber du liest anscheinend die Antworten hier nicht.Joel hat geschrieben:Wie kann man den einen Video im Speicherbereich *Video mit SendNetworkFile() verschicken?
@AndyX:
Meintest du so:?
Client:
Server:
Meintest du so:?
Client:
Code: Alles auswählen
Datei.s = OpenFileRequester(Datei, "", "", 0)
If OpenFile(0, Datei) = 0
Debug "Error: OpenFile!"
End
EndIf
lenFile = Lof(0)
*buffer = AllocateMemory(lenFile)
*pack = AllocateMemory(lenFile + 8)
ReadData(0, *buffer, lenFile)
lenPack = PackMemory(*buffer, *pack, lenFile, 7)
If lenPack
MessageRequester("Info", "Ratio: " + StrF(lenPack/lenFile))
Else
MessageRequester("Info", "Weitere Komprimierung nicht möglich")
EndIf
; *pack -> Daten zu senden
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
Port = 6832
ConnectionID = OpenNetworkConnection("joel2.dyndns.org", Port)
If ConnectionID = 1
MessageRequester("Error", "Can't load the movie...", 0)
End
EndIf
;Name$ = OpenFileRequester("Senden", "C:\", "*.*", 0 , 0)
;If Name$
SendNetworkData(ConnectionID, *pack, 55555)
CloseNetworkConnection(ConnectionID)
;Else
;MessageRequester("PureBasic - Client", "Can't find the server (Is it launched ?).", 0)
;EndIf
End
Server:
Code: Alles auswählen
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
Port = 6832
Buffer = AllocateMemory(1000)
If CreateNetworkServer(0, Port)
MessageRequester("PureBasic - Server", "Server created (Port "+Str(Port)+").", 0)
Repeat
SEvent = NetworkServerEvent()
If SEvent
ClientID = EventClient()
Select SEvent
Case 1
MessageRequester("PureBasic - Server", "hat sich gemeldet ", 0)
Case 2
MessageRequester("PureBasic - Server", "Ein Client hat eine roh-datei gesendet ", 0)
;DateiName$ = SaveFileRequester("Bitte Datei zum Speichern auswählen", "C:\", "*.*", 0)
;DateiName$
If *Video = AllocateMemory(3000000)
lenFile = Lof(0)
ReceiveNetworkData(ClientID, *Video, lenFile)
CopyFile("*Video", "C:\testttttt1.avi")
EndIf
;MessageRequester("Info", "String: "+PeekS(Buffer), 0)
End
Case 3
MessageRequester("PureBasic - Server", "Ein Client hat eine Datei gesendet!", 0)
SendNetworkString(ClientID, "Ja")
DateiName$ = SaveFileRequester("Bitte Datei zum Speichern auswählen", "C:\", "*.*", 0)
If DateiName$
ReceiveNetworkFile(ClientID, DateiName$)
EndIf
Case 4
MessageRequester("PureBasic - Server", "Die verbindung wurde beendet!", 0)
Quit = 1
EndSelect
EndIf
Until Quit = 1
MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
CloseNetworkServer(0)
Else
MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf
End
hui, die Codes müssen aber dringendst mal aufgeräumt werden...
ich würde es so machen(Code ungetestet!):
Client
Server
gleich auch mal die ganzen unpassenden Whitespace-Funktionen entfernt...
ich würde es so machen(Code ungetestet!):
Client
Code: Alles auswählen
Datei.s = OpenFileRequester(Datei,"","",0)
If ReadFile(0,Datei) = 0
End
EndIf
lenFile = Lof(0)
*buffer = AllocateMemory(lenFile)
*pack = AllocateMemory(lenFile + 8)
ReadData(0,*buffer,lenFile)
lenPack = PackMemory(*buffer,*pack,lenFile,7)
If lenPack
MessageRequester("Info","Ratio: "+StrF(lenPack/lenFile))
Else
MessageRequester("Info","Weitere Komprimierung nicht möglich")
EndIf
; *pack -> Daten zu senden
If InitNetwork() = 0
MessageRequester("Error","Can't initialize the network!",0)
End
EndIf
Port = 6832
ConnectionID = OpenNetworkConnection("joel2.dyndns.org",Port)
If ConnectionID = 0
MessageRequester("Error","Can't connect to server...",0)
End
EndIf
SendNetworkString(ConnectionID,Str(lenFile + 8))
SendNetworkString(ConnectionID,GetFilePart(Datei))
SendNetworkData(ConnectionID,*pack,lenFile + 8)
CloseNetworkConnection(ConnectionID)
Code: Alles auswählen
If InitNetwork() = 0
MessageRequester("Error","Can't initialize the network!",0)
End
EndIf
Port = 6832
Buffer = AllocateMemory(1000)
*Video = AllocateMemory(3000000)
If CreateNetworkServer(0,Port)
MessageRequester("PureBasic - Server","Server created (Port "+Str(Port)+").",0)
Repeat
SEvent = NetworkServerEvent()
If SEvent
ClientID = EventClient()
Select SEvent
Case 1
MessageRequester("PureBasic - Server","Ein Client hat sich gemeldet.",0)
Case 2
MessageRequester("PureBasic - Server","Ein Client hat eine Roh-datei gesendet.",0)
ReceiveNetworkData(ClientID,Buffer,1000)
len = Val(PeekS(Buffer))
Buffer = ReAllocateMemory(Buffer,1000)
ReceiveNetworkData(ClientID,Buffer,1000)
Datei.s = PeekS(Buffer)
ReceiveNetworkData(ClientID, *Video, len)
CreateFile(0,Datei)
WriteData(0,*Video,3000000)
CloseFile(0)
EndIf
Case 3
MessageRequester("PureBasic - Server", "Ein Client hat eine Datei gesendet!",0)
SendNetworkString(ClientID, "Ja")
DateiName$ = SaveFileRequester("Bitte Datei zum Speichern auswählen", "C:\", "*.*", 0)
If DateiName$
ReceiveNetworkFile(ClientID, DateiName$)
EndIf
Case 4
MessageRequester("PureBasic - Server", "Die verbindung wurde beendet!", 0)
Quit = 1
EndSelect
EndIf
Until Quit = 1
MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
CloseNetworkServer(0)
Else
MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf
Zuletzt geändert von AndyX am 08.07.2006 18:50, insgesamt 1-mal geändert.