Ich habe mal was *zusammengezimmert*. Es beinhaltet das nötigste um multiple Client-Verbindungen
aufzubauen. Um das Error-Handling musst Du dich dann selber noch drum kümmern.
Imports System.Net
Imports System.Net.Sockets
Public Class Server
Private Const DataBufferSize As Integer = 2048
Private DataBuffer(DataBufferSize) As Byte
Private m_Port As Integer
Private m_IPAddress As String
Private m_ClientList As List(Of TcpClient)
Private myListener As TcpListener
Public Sub New(ByVal IPAddress As String, ByVal Port As Integer)
m_IPAddress = IPAddress
m_Port = Port
End Sub
Public Sub [Start]()
Try
m_ClientList = New List(Of TcpClient)
Dim localAddr As IPAddress = IPAddress.Parse(m_IPAddress)
myListener = New TcpListener(localAddr, m_Port)
myListener.Start()
' Asynchrone Verbindung initialisieren
myListener.BeginAcceptTcpClient(New AsyncCallback(AddressOf _
DoAcceptTcpClientCallback), myListener)
Catch ex As Exception
Throw ex
End Try
End Sub
Public Sub [Stop]()
If Not myListener Is Nothing Then
For Each c As TcpClient In m_ClientList
c.Close()
Next
myListener.Stop()
End If
End Sub
''' <summary>
''' Hier kommen die Verbindungsversuche von Clients an
''' </summary>
Private Sub DoAcceptTcpClientCallback(ByVal ar As IAsyncResult)
Try
Dim listener As TcpListener = CType(ar.AsyncState, TcpListener)
' Das ist der Client, der eine Verbindung aufbaut
Dim client As TcpClient = listener.EndAcceptTcpClient(ar)
' Client in eine List(of TCPClient) übernehmen
m_ClientList.Add(client)
' Asynchrones Lesen vom Client initialisieren
client.GetStream.BeginRead(DataBuffer, 0, DataBufferSize, AddressOf _
DoReadAsync, client)
' Den Listener wieder auf eingehende Verbindungsversuche einstellen
listener.BeginAcceptTcpClient(AddressOf DoAcceptTcpClientCallback, _
listener)
Catch ex As ObjectDisposedException
'...
End Try
End Sub
''' <summary>
''' Hier sendet ein Client Daten
''' </summary>
Private Sub DoReadAsync(ByVal ar As IAsyncResult)
Dim m_Client As TcpClient = CType(ar.AsyncState, TcpClient)
Dim BytesRead As Integer
Dim strMessage As String
Try
SyncLock m_Client.GetStream
BytesRead = m_Client.GetStream.EndRead(ar)
If BytesRead < 1 Then
' Client hat die Verbindung getrennt
Return
End If
' Hier sind die empfangenen Daten vom Client
' Damit kannst Du dann arbeiten.
strMessage = System.Text.Encoding.Default.GetString(DataBuffer, 0, _
BytesRead)
Debug.WriteLine(strMessage)
m_Client.GetStream.BeginRead(DataBuffer, 0, DataBufferSize, _
AddressOf DoReadAsync, m_Client)
End SyncLock
Catch exObjectDisposed As ObjectDisposedException
' Fehlerbehandlung hier einbauen
Catch ex As Exception
' Fehlerbehandlung hier einbauen
End Try
End Sub
End Class Hier eine Clientverbindung...
Imports System.Net
Imports System.Net.Sockets
Public Class Form1
Private myServer As New Server("127.0.0.1", 1234)
Private myClient As TcpClient
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
myServer.Start()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
For x As Int16 = 1 To 10
myClient = New TcpClient
myClient.Connect("127.0.0.1", 1234)
If myClient.Connected Then
Dim w As New IO.StreamWriter(myClient.GetStream, _
System.Text.Encoding.Default)
w.Write(String.Format("Client Nummer {0} sendet Daten zum Server", _
x.ToString))
w.Flush()
End If
Next
End Sub
End Class Gru?
---------------------------------------------------
Snoopy sagt - vb@rchiv find ich gut...
Schon gesehen? OSMMapViewer V2 Control |