Evo, nasao sam malo vremena, pa sam malo sredio kod tog programcica sto sam nasao, i napravio klasu od njega. Doduse, ovo je samo client strana. Server ce doci uskoro, kad opet nakrpim malo vremena.
Mislim da se moze skontati sta, kako i zasto radi, a mozete i kopirati klasu, pa pozivati metode.
Evo koda:
Code (vbnet):
Imports System.Net.Sockets
Public Class TcpClient
Public Event MessageRecieved(ByVal Message As String)
Public Event ErrorOccured(ByVal ErrorNumber As Integer, ByVal ErrorCaller As String, ByVal Reason As String)
Dim ClientSocket As New System.Net.Sockets.TcpClient
Dim ServerStream As NetworkStream
Dim Receiving As Threading.Thread = New Threading.Thread(AddressOf GetMessage)
Dim strMessage As String
Dim blnIsConnected As Boolean = False
Public ReadOnly Property LastMessage() As String
Get
Return strMessage
End Get
End Property
Public ReadOnly Property IsConnected() As Boolean
Get
Return blnIsConnected
End Get
End Property
Public Sub ConnectToServer(ByVal ServersIP As String, ByVal Port As Integer, Optional ByVal StartReceivingNow As Boolean = False)
Try
ClientSocket.Connect(ServersIP, Port)
ServerStream = ClientSocket.GetStream
If StartReceivingNow Then
Call StartReceiving()
End If
blnIsConnected = True
Catch ex As Exception
RaiseEvent ErrorOccured(1, "Public Sub ConnectToServer", ex.Message.ToString)
End Try
End Sub
Public Sub CloseConnection()
If blnIsConnected Then
ServerStream.Close()
ClientSocket.Close()
blnIsConnected = False
If Receiving.IsAlive Then
Receiving.Abort()
End If
Else
RaiseEvent ErrorOccured(3, "Public Sub CloseConnection", "Not connected.")
End If
End Sub
Public Sub StartReceiving()
If blnIsConnected Then
Receiving.Start()
Else
RaiseEvent ErrorOccured(3, "Public Sub StartReceiving", "Not connected.")
End If
End Sub
Public Sub SendMessage(ByVal Message As String)
If blnIsConnected Then
Dim TextToSend As Byte()
TextToSend = System.Text.Encoding.ASCII.GetBytes(Message)
ServerStream.Write(TextToSend, 0, TextToSend.Length)
ServerStream.Flush()
Else
RaiseEvent ErrorOccured(3, "Public Sub SendMessage", "Not connected.")
End If
End Sub
Private Sub GetMessage()
Do
Try
ServerStream = ClientSocket.GetStream
Dim BufferSize As Integer
Dim Buffer(10024) As Byte
BufferSize = ClientSocket.ReceiveBufferSize
ServerStream.Read(Buffer, 0, BufferSize)
strMessage = System.Text.Encoding.ASCII.GetString(Buffer)
RaiseEvent MessageRecieved(strMessage)
Catch ex As Exception
If blnIsConnected Then
RaiseEvent ErrorOccured(2, "Private Sub GetMessage", ex.Message.ToString)
Call CloseConnection()
End If
End Try
Loop While blnIsConnected
End Sub
End Class
U okviru forme bi trebali ubaciti nesto ovako...
Code (vbnet):
Dim WithEvents Client As New TcpClient
Dim strMessage As String
Private Sub NewMessage(ByVal RecievedMessage As String) Handles Client.MessageRecieved
strMessage = RecievedMessage
If Me.InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf ShowMessage))
Else
ShowMessage()
End If
End Sub
Private Sub ShowMessage()
TextBox2.Text = TextBox2.Text + vbCrLf + strMessage
End Sub
Ovo je neophodno zbog thread-a koji prima poruke.
Nadam se da ce vam biti od koristi. Ako imate nekih pitanja, primedbi, sugestija, ili ideju kako resiti ovo s thread-om i invoke, tj. kako ih ugraditi u klasu, rad sam da cujem. ;)
[Ovu poruku je menjao mmix dana 24.05.2010. u 08:59 GMT+1]