Ich habe dir die kompletten Dateieigenschaften Quell-Code kopiert.
Aber die Form1 habe ich dir nur eine ganz kurze Version geschrieben, denn wenn ich dir die Komplette Chat Programm Quell-Code sende würde diese seine sehr lang werden.
Und es wäre ja vermutlich uninteressant, da es ja nur um die Verbindung geht, und nicht das Chatprogramm an sich.
Dateieigenschaften
Imports System.Net
Imports System.Net.Sockets
Imports System.ComponentModel
Imports System.ComponentModel.Design
Imports System.Text
<ToolboxBitmap(GetType(Winsock), "Winsock.png")>
<System.ComponentModel.DefaultEvent("HandleError")> _
Public Class Winsock
Inherits System.ComponentModel.Component
#Region " Variables "
Private _Paketgröße As Integer = 8192
Private _LocalHostName As String = Dns.GetHostName ' = ""
Private _LocalIP As String = LokalHostIP() '"127.0.0.1"
Private _LocalPort As Integer = 8080
Private _RemoteIP As String = "127.0.0.1"
Private _RemoteHostName As String '= 8080
Private _RemoteHost As String '= 8080
Private _RemoteHostIP As String '= 8080
Private _RemotePort As Integer '= 8080
Private _Status As WinsockStates = WinsockStates.Closed
Private _bufferCol As Collection
Private _byteBuffer(_Paketgröße) As Byte
Private _SocketListTCP As Socket
Private _SocketListUDP As Socket
Private _ClientServerTCP As Socket
Private _ClientServerUDP As Socket
Private DataBuffer() As Byte
Private _Tag As String
Private _BytesReceived As Long = 0
Private _BytesTotal As Long
Private _Protokoll As WinsockProtocol
#End Region
Public Sub New()
_LocalPort = 8080
_Protokoll = WinsockProtocol.TCP
_Status = WinsockStates.Closed
_Paketgröße = 8192
End Sub
#Region " Events "
''' <summary>
''' Tritt auf, wenn die Verbindungsoperation abgeschlossen ist.
''' </summary>
Public Event Connected(ByVal sender As Winsock)
''' <summary>
''' Tritt auf, nachdem die Verbindung getrennt wurde.
''' </summary>
Public Event Closend(ByVal sender As Winsock)
''' <summary>
''' Tritt auf, wenn Daten vom Remote Computer empfangen wurden.
''' </summary>
''' <param name="BytesTotal">gibt die Daten größe in Bytes zurück.</param>
Public Event DataArrival(ByVal sender As Winsock, ByVal BytesTotal As Long)
''' <summary>
''' Tritt auf, wenn ein Remote Client versucht, eine Verbindung
' herzustellen.
''' </summary>
''' <param name="requestID">gibt die Identität über die Akzeptierte
' Verbindung ab oder legt es fest.</param>
Public Event ConnectionRequest(ByVal sender As Winsock, ByVal requestID As _
Socket)
''' <summary>
''' Tritt auf, wenn die gesendete Daten abgeschlossen ist.
''' </summary>
Public Event SendComplete(ByVal sender As Winsock)
''' <summary>
''' Tritt auf, wenn ein Fehler entstanden ist.
''' </summary>
Public Event HandleError(ByVal sender As Winsock, ByVal ErrNumber As _
Integer, ByVal Description As String)
#End Region
#Region " Ports "
''' <summary>
''' Gibt den Anschluß zurück, der auf dem lokalen Computer verwendet wird,
' oder legt den Anschluß fest.
''' </summary>
Public Property LokalPort() As Integer
Get
Return _LocalPort
End Get
Set(ByVal value As Integer)
Select Case Status
Case WinsockStates.Listening
Throw New Exception("Können die lokalen Port nicht ändern," & _
"während bereits auf einem Port lauscht")
Case WinsockStates.Connected
Throw New Exception("Können die lokalen Port einer" & _
"Verbindung, die bereits aktiv ist nicht mehr ändern.")
Case Else
If Status <> WinsockStates.Closed AndAlso Status <> _
WinsockStates.Closing Then
Throw New Exception("Können die lokalen Port nicht" & _
"ändern, während die Komponente verarbeitet, kann es" & _
"negative Auswirkungen auf den Verbindungsprozess.")
End If
End Select
_LocalPort = value
End Set
End Property
''' <summary>
''' Gibt den Anschluß auf dem Remote Computer zurück, über den eine
' Verbindung hergestellt werden soll, oder legt den Anschluß fest.
''' </summary>
<Browsable(False)> _
Public ReadOnly Property RemotePort() As Integer
Get
Return _RemotePort
End Get
End Property
#End Region |