Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Artiklar / Titel på artikeln

Bygg ett chat system med winsock.ocx

Postad 2003-02-09 av Erik Christiansson i sektionen ASP.NET, C#, Okategoriserat med 0 Kommentarer | Läst av: 4487, Betyg: 58%

Förord

I den här kursen ska vi skapa ett server/klient-baserat chat system, d v s vi ska ha ett server-program och ett klient-program. Servern skall hålla reda på vilka som är anslutna och skicka vidare alla inkomna meddelanden till alla användare. Klienten skall skicka meddelanden till servern och ta emot andra från den.
Innehåll
  » Server
  » Klient
  » Summering
Börja med ett nytt projekt. Lägg till en socket. Döp den till 'Socket' och sätt Index till 0. Lägg till två textboxar, txtLog och txtShout. På txtLog sätter du MultiLine och Locked till True och ScrollBars till '2 - Vertical'. txtShout behöver du inte ändra på


Server



Option Explicit

' Lagrar det portnummer som servern ska lyssna på/klienten ska ansluta till
Const Port = 1946

Private Sub Form_Load()
' Visa det lokala IP-numret i titelraden
Me.Caption = "WinSock Chat Server - " & Socket(0).LocalIP
' Inställningar för vår första socket
With Socket(0)
' Sätt portnummer och börja lyssna
.LocalPort = Port
.Listen
End With
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim Client As Integer
' Loopa igenom alla sockets och stäng anslutningarna
For Client = 0 To Socket.UBound
Socket(Client).Close
Next Client
End Sub

' Den här rutinen lägger till text i logg-rutan och sätter markeringen sist i
' texten så att man alltid ser den senaste delen av loggen
Private Sub AddText(Text As String)
txtLog = txtLog & Text & vbCrLf
txtLog.SelStart = Len(txtLog)
End Sub

' När man trycker på enter i meddelande-rutan så sickas texten till klienterna
Private Sub txtShout_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
' Skicka meddelandet, användarnamnet är 'Server'
Shout txtShout, "Server"
' Töm textrutan
txtShout = ""
' Ignorera knapptryckningen
KeyAscii = 0
End If
End Sub

' Skickar meddelandet till alla anslutna klienter
Private Sub Shout(Text As String, User As String)
Dim Client As Integer
For Client = 0 To Socket.UBound
' Skicka bara om socketen är ansluten
If Socket(Client).State = sckConnected Then
Socket(Client).SendData User & ": " & Text
DoEvents
End If
Next Client
End Sub

' ConnectionRequest sker när en klient försöker ansluta
Private Sub Socket_ConnectionRequest(Index As Integer, ByVal requestID As Long)
With Socket(Index)
' Sluta lyssna
.Close
' Acceptera användaren och låt henne ansluta
.Accept requestID
End With

' Ladda en ny socket och lyssna
Load Socket(Socket.UBound + 1)
With Socket(Socket.UBound)
.LocalPort = Port
.Listen
End With
End Sub

' Inkommande data
Private Sub Socket_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim data As String
' Läs in den inkommande datan i strängen data
Socket(Index).GetData data, vbString
' Om det första tecknet är ASCII 20 så är det ett kommando, inte ett meddelande
If Asc(Left(data, 1)) = 20 Then
' Alla kommandon är 4 tecken långa
Select Case Mid(data, 2, 4)
' Klienten vill ange/byta användarnamn
Case "USER"
' Spara användarnamnet i socketens .Tag så är den lättåtkomlig
Socket(Index).Tag = Mid(data, 7)
' Klienten vill avsluta
Case "QUIT"
' Bryt anslutningen
Socket(Index).Close
' Ignorera alla andra kommandon
Case Else
End Select
' Det var inte ett kommando, med andra ord var det text
Else
' Skicka texten till alla anslutna klienter
Shout data, Socket(Index).Tag
End If
' Lägg till datan och 'avsändaren' i loggen
AddText Socket(Index).Tag & ": " & data
End With
End Sub



Klient

Börja med ett nytt projekt. Lägg till en socket. Döp den till 'Socket'. Lägg till två textboxar, txtLog och txtShout. På txtLog sätter du MultiLine och Locked till True och ScrollBars till '2 - Vertical'. txtShout behöver du inte ändra på.


Option Explicit

' En variabel för användarnamnet
Dim UserName As String
' Konstanter för servern som vi ska ansluta till
Const Server = "localhost" ' Namn eller IP-numer. Vi kan lika gärna skriva 127.0.0.1.
Const Port = 1946

Private Sub Form_Load()
' Fråga efter användarnamn
UserName = InputBox("Your username", "Username", "User")
' Visa det lokala IP-numret i titelraden
Me.Caption = Me.Caption & " - " & Socket.LocalIP
' Gör inställningar på socketen och anslut
With Socket
.RemoteHost = Server
.RemotePort = Port
.Connect
End With
End Sub

Private Sub Form_Unload(Cancel As Integer)
' Om vi är anslutna, skicka nedkopplings kommandot till servern
If Socket.State = sckConnected Then Socket.SendData Chr(20) & "QUIT"
DoEvents
End Sub

' Den här rutinen lägger till text i logg-rutan och sätter markeringen sist i
' texten så att man alltid ser den senaste delen av loggen
Private Sub AddText(Text As String)
txtLog = txtLog & Text & vbCrLf
txtLog.SelStart = Len(txtLog)
End Sub

' När man trycker på enter i meddelande-rutan så sickas texten till servern
Private Sub txtShout_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
' Skicka meddelandet
Socket.SendData txtShout
' Töm textrutan
txtShout = ""
' Ignorera knapptryckningen
KeyAscii = 0
End If
End Sub

' Servern kopplade ner oss
Private Sub Socket_Close()
' Visa i loggen
AddText "Disconnected"
End Sub

' Uppkopplingen mot servern är klar
Private Sub Socket_Connect()
' Visa i loggen
AddText "Connected"
' Skicka vårt användarnamn
Socket.SendData Chr(20) & "USER " & UserName
End Sub

' Inkommande data
Private Sub Socket_DataArrival(ByVal bytesTotal As Long)
Dim data As String
' Läs in den inkommande datan i strängen data
Socket.GetData data, vbString
' Visa i loggen
AddText data
End Sub



Summering

Nu är det klart! Kompilera både serven och klienten. Nu är det bara att starta en server och x antal klienter och chatta med dig själv!

Det här är en fullt fungerande stomme till ett chat-program, men det är fortfarande mycket som måste fixas. T.ex så borde man kunna 'kicka' användare från servern. Man borde också kunna bestämma vem/vilka som ska se meddelandet. En annan kul grej kunde vara om man kunde se vilka som har loggat på, ungefär som i ICQ. Vidare så kunde man göra en web-baserad klient i t ex ASP eller Perl.


Du kan ladda ner ett exempel här Winsock Chat
Upp

0 Kommentarer

Skriv en kommentar på artikeln

Ditt betyg på artikeln



Kommentar:





Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 154
27 952
271 704
1 289
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies