|
| |

VB.NET - Fortgeschrittene| Auch ein Socket Problem | |  | | Autor: XCsom | | Datum: 07.07.06 00:18 |
| Guten Abend zusammen,
wo fang ich an? Am Besten von vorne.......
Also, ich möchte mir gerne ein eigenes Chat-Programm basteln. Soll folgendermassen aussehen:
Server nimmt Verbindungen, bzw. Nachrichten, an und verteilt diese dann an alle Verbundenen Clients. Da ich noch nicht solange programmiere, funktioniert das ganze nicht so richtig:
Darf ich mal zeigen, was ich bisher habe.....
Public Class Form1
Dim serverstatus As Integer = 0
Dim client As New Socket(AddressFamily.InterNetwork, SocketType.Stream, _
ProtocolType.IP)
Dim server As New Socket(AddressFamily.InterNetwork, SocketType.Stream, _
ProtocolType.IP)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
CheckForIllegalCrossThreadCalls = False
ServStatLB.Text = serverstatus
Dim iphost As IPHostEntry = Dns.Resolve(Dns.GetHostName())
IPAdressesCB.Items.AddRange(iphost.AddressList)
IPAdressesCB.Items.Add("127.0.0.1")
IPAdressesCB.SelectedIndex = 0
StartServer.PerformClick()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles StartServer.Click
Dim ServerIP As IPAddress = IPAddress.Parse( _
IPAdressesCB.SelectedItem.ToString())
Dim LocalEndPoint As New IPEndPoint(ServerIP, 26000)
server.Bind(LocalEndPoint)
server.Listen(2)
serverstatus = 1
ServStatLB.Text = serverstatus
StatLB.Text = "Server listening on: " & CType(server.LocalEndPoint, _
IPEndPoint).Address.ToString() & ":" & CType(server.LocalEndPoint, _
IPEndPoint).Port.ToString()
AcceptConnectionsBGW.RunWorkerAsync()
End Sub
Private Sub AcceptConnectionsBGW_DoWork(ByVal sender As System.Object, _
ByVal e As System.ComponentModel.DoWorkEventArgs) Handles _
AcceptConnectionsBGW.DoWork
Do While serverstatus = 1
client = server.Accept()
Dim port As Int32 = CType(client.RemoteEndPoint, IPEndPoint).Port
Dim tcpip As String = CType(client.RemoteEndPoint, _
IPEndPoint).Address.ToString()
ConnectedClientsLB.Items.Add(tcpip & ":" & port)
Dim bytes(client.ReceiveBufferSize) As Byte
Dim str As String = Encoding.ASCII.GetString(bytes, 0, _
client.Receive(bytes))
MsgTB.Text += str & Environment.NewLine
If MessageThreadBGW.IsBusy = False Then
MessageThreadBGW.RunWorkerAsync()
End If
Loop
End Sub
Private Sub StopServer_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles StopServer.Click
server.Close()
serverstatus = 0
ServStatLB.Text = serverstatus
StatLB.Text = "Server gestoppt"
End Sub
Private Sub MessageThreadBGW_DoWork(ByVal sender As System.Object, ByVal e _
As System.ComponentModel.DoWorkEventArgs) Handles MessageThreadBGW.DoWork
Do While serverstatus = 1
Dim bytes(client.ReceiveBufferSize) As Byte
Dim str As String = Encoding.ASCII.GetString(bytes, 0, _
client.Receive(bytes))
MsgTB.Text += str & Environment.NewLine
Loop
End Sub
End ClassDer Servercode ist auch noch nicht ganz fertig, es fehlt noch die Routine um die erhaltenen Nachrichten weiterzuleiten usw. Aber egal, um das zu machen, muss ich erstmal mein Problem in den Griff kriegen:
Ich starte den Server, er horcht auf Port: 26000, alles wunderbar.
Ich starte den 1. Client und lass ihn zum Server verbinden, klappt wunderbar.
Ich tippe eine Nachricht im 1. Client und schicke diese zum Server, no Problem.
Starte ich den 2. Client und lass ich zum Server verbinden, wird zwar noch die RemoteIP und der RemotePort in der Serveranwendung angezeigt, aber die 1. Meldung, die der Client beim Connecten absetzen soll, wird beim Server nicht angezeigt.
Will ich im 2. Client eine Nachricht an den Server schicken, taucht die ebenfalls nicht auf.
So, wenn ich aber nun wieder zum 1. Client wechsle und eine Nachricht an den Server schicke, dann läuft plötzlich die 1. Nachricht vom 2. Client, sowie alle auf dem 2. Client getippten Nachrichten, beim Server auf.
Werden diese in einer Warteschlange gepuffert? Und warum dringen die Nachrichten vom 2. Client nicht bis zum Server durch? Irgenwie verstehe ich das ganze nicht so richtig.
Kann es sein, das der Server die beiden Clients nicht unterscheiden kann?
Wäre sehr dankbar, wenn mir jemand von euch einen kleinen Schubs in die Richtige Richtung geben könnte. Würde mir sehr viel Freude machen, das ganze richtig zu verstehen.
Vielen lieben Dank erstmal.
Danny
P.S.: Ich weiss der ganze Code ist noch lange nicht gut, ich bin ja auch erst am Rumprobieren......  |  |
 | 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! sevCommand 4.0 
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. 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
|