Nun gut wenn du meinst, aber hier ist einfacher C/S Code, der ein Chat ermöglicht und auch eine Datei schickt mit nur einer Verbindung, wie meistens der Fall ist bei solchen Übertragungen (basiert auf Beispielcode von ReinhardH)
Client
'##########################################################################
' #######################
' client code
'##########################################################################
' #######################
' sender stream
Private output As NetworkStream
' schreiben und lesen des stream
Private writer As BinaryWriter
Private reader As BinaryReader
' message
Private message As String = ""
' thread um ein blockieren der anwednung zu verhindern
Private readThread As Thread
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
'neuer client thread kreieren
readThread = New Thread(AddressOf RunClient)
'thread starten
readThread.Start()
End Sub
Private Sub txtInput_KeyDown(ByVal sender As System.Object, ByVal e As _
System.Windows.Forms.KeyEventArgs) Handles txtClientInput.KeyDown
' keydown event (abfrage nach enter) wird benützt um zu senden
Try
'wurde enter gedrückt?
If e.KeyCode = Keys.Enter Then
' ja, sende textboxinhalt
writer.Write("CLIENT>>> " & txtClientInput.Text)
txtClientOutput.Text &= vbCrLf & "CLIENT>>> " & _
txtClientInput.Text
txtClientInput.Clear()
End If
' ausnahme behandeln
Catch exception As SocketException
txtClientOutput.Text &= vbCrLf & "fehler beim schreiben"
End Try
End Sub
Public Sub RunClient()
Dim client As TcpClient
'instanziere client
Try
txtClientOutput.Text &= "verbindungsaufbau" & vbCrLf
'kreiere neuen client
client = New TcpClient()
'verbinden mit server (localhost kann mit einer gültigen ip ersetzt
' werden
client.Connect("localhost", 3456)
'networkstream binden
output = client.GetStream()
' kreiere neuen streamschreiber und streamleser
writer = New BinaryWriter(output)
reader = New BinaryReader(output)
txtClientOutput.Text &= vbCrLf & "stream erhalten" & vbCrLf
txtClientInput.ReadOnly = False
Try
Do
'nachricht des servers lesen
message = reader.ReadString
txtClientOutput.Text &= vbCrLf & message
Loop
' ausnahme behandeln
Catch inputOutputException As IOException
MessageBox.Show("client application beenden")
Finally
txtClientOutput.Text &= vbCrLf & "verbindung schliessen." & _
vbCrLf
'stream schreiber schliessen
writer.Close()
'stream leser schliessen
reader.Close()
'stream schliessen
output.Close()
'tcpclient schliessen
client.Close()
End Try
Application.Exit()
' ausnahme behandeln
Catch inputOutputException As Exception
MessageBox.Show("client applikation beenden")
End Try
End Sub
' Datei schicken
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button2.Click
Dim fn As String = "temp.bmp"
Dim fs As New FileStream("F:\Work Dev\VSNet Dev\Test\" & fn, _
FileMode.Open)
Dim b(fs.Length - 1) As Byte
fs.Read(b, 0, b.Length)
fs.Close()
writer.Write("SendFile")
writer.Write(fn)
writer.Write(CInt(b.Length))
writer.Write(b)
End Sub Server
'##########################################################################
' #######################
' server code
'##########################################################################
' #######################
' socket für verbindung
Private connection As Socket
' sender stream des servers
Private socketStream As NetworkStream
' schreiben und lesen des stream
Private writer As BinaryWriter
Private reader As BinaryReader
' thread um ein blockieren der anwednung zu verhindern
Private readThread As Thread
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
readThread = New Thread(AddressOf RunServer)
readThread.Start()
End Sub
Private Sub txtInput_KeyDown(ByVal sender As System.Object, ByVal e As _
System.Windows.Forms.KeyEventArgs) Handles txtServerInput.KeyDown
Try
If e.KeyCode = Keys.Enter Then
writer.Write("Server>>> " & txtServerInput.Text)
txtServerOutput.Text &= vbCrLf & "Server>>> " & txtServerInput.Text
txtServerInput.Clear()
End If
Catch exception As SocketException
txtServerOutput.Text &= vbCrLf & "fehler beim schreiben"
End Try
End Sub
Public Sub RunServer()
Dim listener As TcpListener
Dim counter As Integer = 1
Try
listener = New TcpListener(3456)
listener.Start()
While True
txtServerOutput.Text = "auf verbindung warten" & vbCrLf
'hier wird das listen des servers gesetzt
connection = listener.AcceptSocket()
'ipa = CType(connection.RemoteEndPoint, IPEndPoint).Address
'Dim ipab() As Byte = ipa.GetAddressBytes()
'Debug.WriteLine(connection.LocalEndPoint.ToString())
'netwrokstream binden
socketStream = New NetworkStream(connection)
' kreiere neuen streamschreiber und streamleser
writer = New BinaryWriter(socketStream)
reader = New BinaryReader(socketStream)
txtServerOutput.Text &= "verbindung " & counter & "." & vbCrLf
'bestätige client erfolgreiche konnektierung
writer.Write("SERVER>>> verbindung erfolgreich")
txtServerInput.ReadOnly = False
Dim theRequest As String = ""
Try
Do
'des clients nachrichten lesen und nach TRENNEN meldung
' auswerten
theRequest = reader.ReadString()
txtServerOutput.Text &= vbCrLf & theRequest
' Wenn Datei, dann Datei empfangen und abspeichern
If theRequest = "SendFile" Then
Dim fn As String = reader.ReadString()
Dim l As Integer = reader.ReadInt32()
Dim b() As Byte = reader.ReadBytes(l)
Dim fs As New FileStream(fn, FileMode.Create, _
FileAccess.Write, FileShare.None)
fs.Write(b, 0, l)
fs.Close()
End If
Loop While (theRequest <> "CLIENT>>> TRENNEN" _
AndAlso connection.Connected)
Catch inputOutputException As IOException
MessageBox.Show("Client application closing")
Finally
txtServerOutput.Text &= vbCrLf & "verbindung geschlossen"
txtServerInput.ReadOnly = True
writer.Close()
reader.Close()
socketStream.Close()
'nach msdn erst shutdown und dann close
'connection.Shutdown(SocketShutdown.Both)
connection.Close()
counter += 1
End Try
End While
Catch inputOutputException As IOException
MessageBox.Show("Server application closing")
End Try
End Sub ________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist |