Hallo,
ich möchte gerne ein Kommunikationssystem schreiben, mit dem die
Kollegen unserer Firma im Intranet kleine Nachrichten austauschen können
(kein Chat!). Hierbei soll es keinen zentralen Server geben, an dem sich die
Clients anmelden können. Es soll vielmehr so sein, dass jeder Client
gleichzeitig auch Server sein soll.
Die Netzwerk-Befehle von PB sind mir insoweit bekannt. Leider fehlt mir noch
das Grundkonzept zum Projekt. Wie z.B. findet ein gerade gestarteter Client
die anderen Clients im Netzwerk?
Danke im voraus & Grüße ... Kiffi
Gleichzeitig Server UND Client?
MVXA hat geschrieben:Zu spät -_-. Hab schon was auf VB gefunden ~_~...

so, hier mein bisher zusammengeklauter Code:
Code: Alles auswählen
NewList IntranetComputer.s()
Structure SERVER_INFO_101
dwPlatformId.l
lpszServerName.l
dwVersionMajor.l
dwVersionMinor.l
dwType.l
lpszComment.l
EndStructure
#MAX_PREFERRED_LENGTH = -1
#SV_TYPE_ALL = $FFFFFFFF
#NERR_SUCCESS = 0
#ERROR_MORE_DATA = 234
Procedure GetLANList()
; by Rings
ClearList(IntranetComputer())
se101.SERVER_INFO_101
nStructSize = SizeOf(SERVER_INFO_101)
RetCode = NetServerEnum_(0, 101, @bufptr, #MAX_PREFERRED_LENGTH, @dwEntriesread, @dwTotalentries, #SV_TYPE_ALL, 0, @dwResumehandle)
If RetCode = #NERR_SUCCESS And RetCode <> #ERROR_MORE_DATA
;Loop through And the Data in the memory
For i = 0 To dwEntriesread - 1
CopyMemory( bufptr + (nStructSize * i), @se101, nStructSize)
Buffer.s=Space(512)
Result=WideCharToMultiByte_(#CP_ACP ,0 ,se101\lpszServerName, 255, @Buffer.s, 512, 0, 0)
AddElement(IntranetComputer())
IntranetComputer() = Buffer
Next
EndIf
NetApiBufferFree_(bufptr)
FirstElement(IntranetComputer())
EndProcedure
StartZeit = ElapsedMilliseconds()
GetLANList()
InitNetwork()
While NextElement(IntranetComputer())
ConnectionID = OpenNetworkConnection(IntranetComputer(), 1701)
Debug IntranetComputer() + ": " + Str(ConnectionID)
If ConnectionID
CloseNetworkConnection(ConnectionID)
EndIf
Wend
EndeZeit = ElapsedMilliseconds()
Debug "Ready " + Str(CountList(IntranetComputer())) + " scanned in " + Str(EndeZeit - StartZeit) + " Milliseconds"
und trage sie dann in eine LinkedList ein. Danach muss ich alle Rechner
'anpingen', um herauszufinden, von welchem ich ein Antwort bekomme
(die Rechner, auf denen mein Programm aktiv).
Gut, das ermitteln der Rechnerliste funktioniert gut und schnell. Leider
verbrät die meiste Zeit beim 'anpingen' (35 Rechner werden in knapp 80
Sekunden durchsucht). Geht das nicht evtl. schneller?
Danke & Grüße ... Kiffi
Versuche alle Rechner gleichzeitig anzupingen und nicht nacheinander. So müsste das sehr schnell gehen. Eine Möglichkeit das zu machen, wäre mit Threads zu arbeiten.Geht das nicht evtl. schneller?
Greetz Laurin
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
And we're out of beta. We're releasing on time.
> Versuche alle Rechner gleichzeitig anzupingen und nicht nacheinander.
> So müsste das sehr schnell gehen. Eine Möglichkeit das zu machen,
> wäre mit Threads zu arbeiten.
joh, habe ich in der Zwischenzeit nun auch gemacht. Bin von 80 auf 20
Sekunden gekommen. Bis auf 2 Rechner reagieren alle anderen im
Sekundenbruchteil. Die zwei lahmen Rechner werde ich mit Ausschlussliste
aus dem Ping verbannen.
Danke & Grüße ... Kiffi
> So müsste das sehr schnell gehen. Eine Möglichkeit das zu machen,
> wäre mit Threads zu arbeiten.
joh, habe ich in der Zwischenzeit nun auch gemacht. Bin von 80 auf 20
Sekunden gekommen. Bis auf 2 Rechner reagieren alle anderen im
Sekundenbruchteil. Die zwei lahmen Rechner werde ich mit Ausschlussliste
aus dem Ping verbannen.
Danke & Grüße ... Kiffi