Cliente/Servidor
15/04/2009
0
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
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
Julierme
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)