Klienten

Servern FrmInst

Klienten

Klienten kan man betrakta som ett vilset barn som letar efter sin mamma, servern. För att hitta mamman måste den ha ett IP nummer och en port som den skall ansluta till.

Du behöver:

2 stycken RichTextBox
2 stycken Label
2 tycken knappar
3 stycken former
1 Modul
En Winsock kontroll

Placera dem efter eget tycke eller som på bilden.

Sedan kan vi sätta egenskaperna för kontrollerna.

En av textboxarna:

  • Name: TxtLog
  • Locked: True
  • Scrollbars: 3 - rtfBoth
  • Text: blank

Den andra textboxen:

  • Name: TxtText
  • Scrollbars: 3 - rtfBoth
  • Text: blank

Den ena knappen:

  • Name: CmdSkickaKommando
  • Caption: &Skicka ett kommando

Den andra knappen:

  • Name: CmdAnslut
  • Caption: &Anslut

Den ena labelkontrollen:

  • Name: LblSkriv
  • AutoSize: True
  • Caption: Skriv text och tryck enter:

Den andra labelkontrollen:

  • Name: LblStatus
  • AutoSize: True
  • Caption: Status: Vilar

Winsock-kontrollen:

  • Name: Socket

Sedan namnen på formerna:
Form1: FrmMain
Form2: FrmInst
Form3: FrmSkickaKommando

Och sist men inte minst, modulens namn: ModVariabler

Sedan börjar vi med koden:

Private Sub Form_Load()
ShiftDown = False 'Sätter ShiftDown till falskt
Me.Caption = "Klient - Local IP: " & Socket.LocalIP 'Ändrar formens titel
End Sub

Den första raden sätter ShiftDown till falskt, den andra ändrar formens titel.

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If Socket.State = sckConnected Then Skicka "Hej då" 'Skickar "Hej då" om Socketen är ansluten
DoEvents 'Väntar tills ovanstående är klart
End 'Avslutar
End Sub

Denna kod kollar om klienten är ansluten till servern och skickar i så fall ett meddelande till de andra klienterna om att denna klient försvinner och avslutar.

Sub Anslut()
On Error GoTo fel
With Socket
.RemoteHost = Server 'Anger var servern finns
.RemotePort = Port 'Anger port
Status "Ansluter" 'Ändrar Status till Ansluter
.Connect 'Ansluter
End With
CmdAnslut.Enabled = False 'Gör så att man inte kan trycka flera gånger på Anslut
Exit Sub
fel: 'Fångar upp eventuella fel
If IsNumeric(Port) = False Then 'Kollar om porten är numerisk
MsgBox "Du kan bara ange numeriska värden som port", vbInformation, "Port" 'Visa felmeddelande
End If
End Sub

Denna kod ansluter till servern och visar ett felmeddelande om portnumret är felaktigt - den får alltså bara bestå av siffror.

Sub Status(Text As String)
LblStatus.Caption = "Status: " & Text 'Ändrar status
End Sub

Private Sub TxtText_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyShift Then ShiftDown = True 'Sätter ShiftDown till sant om man trycker ned shift
End Sub

Private Sub TxtText_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyShift Then ShiftDown = False 'Sätter ShiftDown till falskt om man släpper shift
End Sub

"Sub Status" ändrar texten som står i LblStatus och TxtText_KeyDown. TxtText_KeyUp ändrar värdet ShiftDown.

Private Sub CmdAnslut_Click()
FrmInst.Show 1 'Visar FrmInst
Anslut 'Ansluter till servern
End Sub

Visar FrmInst och anropar Anslut när formens stängs.

Private Sub CmdSkickaKommando_Click()
'Varje kommando är tre bokstäver långt
FrmSkickaKommando.Show 1 'Visar FrmSkickaKommao
If Kommando = ing Then Exit Sub 'Kollar om Kommando = ing (Ingenting)
If Socket.State = sckConnected Then 'Kollar om klienten är ansluten
Select Case Kommando 'Kollar vilket kommando som valts
Case tim 'Tid
Skicka Chr(1) & "tim" 'Skicka kommandot
Case dat 'Datum
Skicka Chr(1) & "dat" 'Skicka kommandot
End Select
Kommando = ing 'Sätter Kommando till ing
End If
End Sub

Visar FrmSkickaKommando och skickar det kommando som valts.

Private Sub Socket_Close()
Status "Vilar - Servern är avstängd" 'Ändrar status
CmdAnslut.Enabled = True 'Gör så att man kan trycka på Anslut igen
If Not Socket.State = sckClosed Then Socket.Close 'Stänger socketen om den är öppen
End Sub

Ändrar status och sätter CmdAnslut.Enable till True och stänger socketen om den fortfarande är öppen.

Private Sub Socket_Connect()
Status "Ansluten" 'Ändrar status
If Socket.State = sckConnected Then 'Kollar om klienten är ansluten, kan bli fel annars
Skicka Chr(1) & "anv:" & Användarnamn 'Skickar användarnamnet om klienten är ansluten
DoEvents 'Väntar
Skicka Chr(1) & "log" 'Skickar kommandot log
End If
End Sub

Ändrar status och skickar användarnamnet till servern och hämtar den gångna konversationen.

Private Sub Socket_DataArrival(ByVal bytesTotal As Long)
Dim Text As String 'Den inkommande texten hamnar här
Dim Temp As String 'Den nuvarande texten i TxtLog hamnar här
LockWindowUpdate Me.hWnd 'Förhindra att Windows ritar om fönstret, flimrar mindre
Socket.GetData Text, vbString 'Hämtar texten som skickats
Temp = TxtLog.Text 'Sätter Temp till texten i TxtLog
TxtLog.Text = Text & vbCrLf & Temp 'Sätter in den nya och den gamla texten i TxtLog
LockWindowUpdate 0& 'Säger åt Windows att rita om fönstret igen
End Sub

Hämtar och visar den inkommande texten i TxtLog.

Private Sub Socket_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
Select Case Number 'Kollar vad felet har för nummer
Case "10061" 'Kunde inte hitta servern
Status "Vilar - det gick ej att hitta servern" 'Ändrar status
Case "10060" 'Kunde inte hitta servern
Status "Vilar - det gick ej att hitta servern" 'Ändrar status
Case Else 'Om felets nummer inte fanns med ovan så visas det här
MsgBox "Number: " & Number & vbCrLf & "Fel: " & Description 'Visar felmeddelande
End Select
Status "Vilar - anslutningen misslyckades" 'Ändrar status
CmdAnslut.Enabled = True 'Gör så att man kan trycka på Anslut igen
If Not Socket.State = sckClosed Then Socket.Close 'Stänger socketen om den är öppen
End Sub

Fångar upp eventuellt fel och visar det i LblStatus och stänger socketen om den är ansluten.

Sub Skicka(Text As String)
Status "Skickar data" 'Ändrar status
Socket.SendData Text 'Skickar text
Status "Ansluten" 'Ändrar status
End Sub

Skickar den text som finns i Text.

Private Sub TxtText_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then 'Kollar om det var Enter som trycktes
If Not ShiftDown Then 'Kollar om ShiftDown är sant och avbryter om det är sant
If Socket.State = sckConnected Then Skicka TxtText.Text 'Skickar texten om socketen är ansluten
TxtText.Text = "" 'Nollställer TxtText
KeyAscii = 0 'Ignorera knapptryckningen så att datorn inte "piper"
End If
End If
End Sub

Kollar om det var Enter som trycktes ned och kollar också om ShiftDown är sant och skickar texten in Txttext om Klienten än ansluten.

Det var allt i FrmMain, nu kan vi gå över till FrmInst.

Servern FrmInst

© SupportData.Net