|
| |

Fortgeschrittene Programmierung| Re: WinXP (WINPOPUP)??? | |  | | Autor: Snof | | Datum: 25.04.03 19:28 |
| Hi Gigaherz
Für deinen Chat benötigst du 2 Winsock-Controls
- eins für den Serverbetrieb
- eins für den Clientbetrieb
Ein Programm kann nun sowohl als Server als auch als Client verwendet werden. Mit etwas Programmiergeschik sogar als beides gleichzeitig. Du brauchst also nicht zwei Programme entwickeln.
Dem für den Serverbetrieb gibst du den Index 0 (!WICHTIG!).
Das für den Clientbetrieb erhällt keinen Index.
Der Code für den Server sieht etwa so aus.Option Explicit
'Gibt anzahl der Clients an
Private iConnectedClients As Integer
'Startet den Serverbetrieb
Private Sub cmdServerStarten_Click()
'Port 12345 soll abgehört werden
ServerWinsock(0).LocalPort = 12345
'Abhör-Vorgang starten
ServerWinsock(0).Listen
End Sub
'Beendet den Serverbetrieb
Private Sub cmdServerBeenden_Click()
Dim W As Winsock
For Each W In ServerWinsock
With W
If .State = sckConnected Then
.Tag = "send"
.SendData "Server wird beendet"
Do While .Tag <> vbNullString
DoEvents
Loop
.Close
Unload W
End If
End With
DoEvents
Next W
ServerWinsock(0).Close
iConnectedUsers = 0
End Sub
Private Sub ServerWinsock_SendComplete(Index As Integer)
ServerWinsock(Index).Tag = vbNullString
End Sub
'Wird ausgelösst, wenn ein neur Client connectet
Private Sub ServerWinsock_ConnectionRequest(Index As Integer, ByVal requestID _
As Long)
If Index = 0 Then
iConnectedClients = iConnectedClients + 1
'Lädt ein neues Winsock-Control und Konfiguriert es
Load ServerWinsock(iConnectedClients)
ServerWinsock(iConnectedClients).LocalPort = 12345
ServerWinsock(iConnectedClients).Accept requestID
End If
End Sub
'Wird ausgelößt, wenn Daten empfangen werden
Private Sub ServerWinsock_DataArrival(Index As Integer, ByVal bytesTotal As _
Long)
Dim sDaten As String
'sDaten wird der empfangene Ausdruck zugewiesen
ServerWinsock(Index).GetData sDaten, vbString
'Auswertung der Daten
End With
End Sub
'Wird ausgelößt, wenn ein Client die Verbindung trennt
Private Sub ServerWinsock_Close(Index As Integer)
Winsock(Index).Close
Unload Winsock(Index)
iConnectedClients = iConnectedClients - 1
End Sub Für den Client ist das nätürlich nich so umfangreich.
Du solltest aber auf jeden Fall einen Timer einbauen, der in regelmäßigen Abständen die Verbindung überprüft.'Überprüft, ob noch eine Verbindung besteht
Private Sub Timer_Timer()
If Not (ClientWinsock.State = sckConnected) Then
'Es besteht keine Verbindung
ClientWinsock.Close
ClientWinsock.Connect "1.2.3.4", 12345
End If
End Sub
'Stellt eine Verbindung zum Server her
Private Sub VerbindungAufbauen()
ClientWinsock.Connect "1.2.3.4", 12345
Timer.Enabled = True
End Sub
'Trennt die Verbindung zum Server
Private Sub VerbindungTrennen()
ClientWinsock.Close
Timer.Enabled = False
End Sub Der Code ist natürlich nur ein Gerüst bzw. ein Beispiel. Du must ihn noch auf dein Programm umändern.
Wenn du einzelne Clients ansprehen möchtest, kannst du das über den Index des Server-Winsocks tun. Du must aber darauf achten, dass duch Ein- und Auswählen von Clients nicht jeder Index genutz sein muss. Das heist du hast z.B. die Winsoks:
- ServerWinsock(0)
- ServerWinsock(2)
- ServerWinsock(3)
- ServerWinsock(5)
Wenn du das alles beachtest, dürftest dukeine großen Probleme mit Winsock haben.
demn?chst Online: SnofWare.de |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
Neu! sevEingabe 3.0 
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
| |
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|