Array
(
)

Cliente/Servidor

Julierme
   - 15 abr 2009

Pessoal fiz um client com um form contendo um ListBox(com os IPs das maquinas, digitei manualmente os IPs), um botão para conectar ao servidor, uma caixa de texto(onde digito a url) e um botão de enviar.

O servidor coloquei nas estações
Executo o client e escolho no listbox a qual maquina vou conectar e clico no botão conectar depois digito a url e clico no botão enviar, fazendo isso para a primeira estação funciona legal, mas ao escolher outra estação e fazer o mesmo procedimento da o erro: ´Uma requisição de conexão foi feita em um soquete já conectado´.

Como faço para o cliente aceitar mais de um servidor.

Sei que terei q usar thread, mas sinceramente não sei trabalhar com thread

código do client

Imports System.Net.Sockets
Imports System.Text
Imports System.Net
Imports System.IO.Directory
Imports System.IO

Public Class Form1

Dim clientSocket As New TcpClient()
Dim serverStream As NetworkStream
Dim lerDados As String

Private Sub btnConectar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConectar.Click
Try

If ListBox1.SelectedItem Then
Dim conectserver As String
conectserver = ListBox1.SelectedItem
clientSocket.Connect(conectserver, 8888)
serverStream = clientSocket.GetStream()
If clientSocket.Connected Then
MsgBox(´Conectado a maquina: ´ + conectserver)

End If

End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Private Sub btnEnviarMensagem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnviarMensagem.Click

Try
Dim outStream As Byte() = Encoding.ASCII.GetBytes(txtmensagem.Text)
serverStream.Write(outStream, 0, outStream.Length)
serverStream.Flush()
Catch ex As Exception
MsgBox(ex.Message)
End Try

End Sub

End Class

codigo do servidor

Imports System.Net.Sockets
Imports System.Net
Imports System.Text

Module Module1

Sub Main()
Dim s As String
s = System.Net.Dns.GetHostName()
Dim iphl As System.Net.IPHostEntry = Dns.GetHostEntry(s)
Dim ip() As System.Net.IPAddress = iphl.AddressList
Dim endereco As String
For i As Integer = 0 To ip.Length - 1
endereco = ip(i).ToString
Next

Dim enderecoLocal As IPAddress = IPAddress.Parse(endereco.ToString)

Dim serverSocket As New TcpListener(enderecoLocal, 8888)

Dim clientSocket As TcpClient = Nothing

Dim contador As Integer

serverSocket.Start()

msg(´Servidor inicializado. Aguardando requisições...´)
contador = 0

While (True)
contador += 1
clientSocket = serverSocket.AcceptTcpClient()
msg(´Cliente No:´ + Convert.ToString(contador) + ´ iniciado!´)

Dim cliente As New trataCliente
cliente.iniciarCliente(clientSocket, Convert.ToString(contador))

Dim serverStream As NetworkStream = clientSocket.GetStream()

If serverStream.CanWrite And serverStream.CanRead Then
Dim bytes(clientSocket.ReceiveBufferSize) As Byte
serverStream.Read(bytes, 0, CInt(clientSocket.ReceiveBufferSize))

´ exibe os dados recebidos do client no ie
Dim returndata As String = Encoding.ASCII.GetString(bytes)
Dim ie As New ProcessStartInfo(´IExplore.exe´)
ie.WindowStyle = ProcessWindowStyle.Maximized
ie.Arguments = returndata
Process.Start(ie)
End If
End While
clientSocket.Close()
serverSocket.Stop()
End Sub

Sub msg(ByVal mesg As String)
mesg.Trim()
Console.WriteLine(´ >> ´ + mesg)
End Sub

Public Class trataCliente
Dim clientSocket As TcpClient
Dim clNo As String

Public Sub iniciarCliente(ByVal inClientSocket As TcpClient, ByVal clineNo As String)
Me.clientSocket = inClientSocket
Me.clNo = clineNo
End Sub
End Class