1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
| Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.Windows.Forms
Public Class ClientClass
Private SocketClient As Socket
Private LocalsocketClientIsShutingDown As Boolean
Private readbuf As Byte()
Private sendbuf As Byte()
Private listBox As ListBox
Private Delegate Sub DelegateDisplay(ByVal message As String)
Private dlgDisplay As DelegateDisplay = New DelegateDisplay(AddressOf DisplayMessage)
Public Sub New(ByVal list As System.Windows.Forms.ListBox)
Me.listBox = list
readbuf = New Byte(100) {}
End Sub
Public Sub New()
readbuf = New Byte(100) {}
End Sub
Public Sub ConnectToServer(ByVal ServerAdress As String)
If Me.SocketClient Is Nothing OrElse Not Me.SocketClient.Connected Then
Me.SocketClient = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Dim ipadress As IPAddress()
'Dim he As IPHostEntry = Dns.GetHostByName(ServerName)
ipadress = Dns.GetHostAddresses(ServerAdress)
'ipadress = he.AddressList
Me.SocketClient.BeginConnect(New IPEndPoint(ipadress(0), 23), AddressOf ConnectCallback, Me.SocketClient)
Else
Dim obj As String() = New String() {"Déjà connecté un serveur"}
Me.listBox.Invoke(dlgDisplay, obj)
End If
End Sub
Private Sub ConnectCallback(ByVal asyncResult As IAsyncResult)
Dim obj As String()
Try
Dim socket As Socket = CType(asyncResult.AsyncState, Socket)
Me.SocketClient = socket
socket.EndConnect(asyncResult)
obj = New String() {"Connecté un serveur"}
DisplayMessage(obj(0))
Me.LocalsocketClientIsShutingDown = False
Me.SocketClient.BeginReceive(Me.readbuf, 0, Me.readbuf.Length, SocketFlags.None, AddressOf ReceiveCallback, Me.SocketClient)
Catch ex As SocketException
obj = New String() {ex.Message}
Me.listBox.Invoke(dlgDisplay, obj)
End Try
End Sub
Public Sub SendMessage(ByVal message As String)
If Not (Me.SocketClient Is Nothing) AndAlso Me.SocketClient.Connected Then
Me.sendbuf = Encoding.ASCII.GetBytes(message)
Me.SocketClient.BeginSend(Me.sendbuf, 0, Me.sendbuf.Length, SocketFlags.None, AddressOf SendCallback, Me.SocketClient)
Else
DisplayMessage("Non connecté au serveur.")
End If
End Sub
Private Sub SendCallback(ByVal asyncResult As IAsyncResult)
Dim obj As String()
Try
Dim socket As Socket = CType(asyncResult.AsyncState, Socket)
Dim send As Integer = socket.EndSend(asyncResult)
obj = New String() {"Message envoyé (" + send.ToString() + " bytes envoyés )"}
DisplayMessage(obj(0))
Catch ex As SocketException
obj = New String() {ex.Message}
Me.listBox.Invoke(dlgDisplay, obj)
End Try
End Sub
Public Sub ReceiveMessage()
If Not (Me.SocketClient Is Nothing) AndAlso Me.SocketClient.Connected Then
Me.SocketClient.BeginReceive(Me.readbuf, 0, Me.readbuf.Length, SocketFlags.None, AddressOf ReceiveCallback, Me.SocketClient)
'Me.SocketClient.BeginReceiveMessageFrom(Me.readbuf, 0, Me.readbuf.Length, SocketFlags.None, AddressOf ReceiveCallback, Me.SocketClient)
Else
DisplayMessage("Non connecté au serveur.")
End If
End Sub
Private Sub ReceiveCallback(ByVal asyncResult As IAsyncResult)
Dim obj As String()
Try
Dim socket As Socket = CType(asyncResult.AsyncState, Socket)
Dim read As Integer = socket.EndReceive(asyncResult)
If read > 0 Then
obj = New String() {"Serveur dit :" + Encoding.ASCII.GetString(Me.readbuf)}
DisplayMessage(obj(0))
Me.SocketClient.BeginReceive(Me.readbuf, 0, Me.readbuf.Length, SocketFlags.None, AddressOf ReceiveCallback, Me.SocketClient)
End If
If read = 0 AndAlso Not Me.LocalsocketClientIsShutingDown Then
Me.SocketClient.Close()
obj = New String() {"Fermeture socket distante"}
DisplayMessage(obj(0))
End If
Buffer.SetByte(Me.readbuf, 0, 0)
Catch ex As SocketException
obj = New String() {ex.Message}
DisplayMessage(obj(0))
End Try
End Sub
Public Sub Close()
If Not (Me.SocketClient Is Nothing) AndAlso Me.SocketClient.Connected Then
Me.LocalsocketClientIsShutingDown = True
Me.SocketClient.Shutdown(SocketShutdown.Both)
Me.SocketClient.Close()
Dim obj As String() = New String() {"Connexion fermée"}
DisplayMessage(obj(0))
End If
End Sub
Private Sub DisplayMessage(ByVal message As String)
'Me.listBox.Items.Add(message)
'Me.listBox.SelectedIndex = Me.listBox.Items.Count - 1
Console.WriteLine(message)
End Sub
End Class |
Partager