SYSTEM.NET.SOCKETS
Pessoal,
Peguei um exemplo do macoratti,
[ô]aceita a conexao do cliente e retorna uma inicializacao TcpClient
Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient()
Label1.Text += [Ô]Conexão aceita.[Ô] & vbCrLf
[ô] obtem o stream
[ô]Dim networkStream As NetworkStream = tcpClient.GetStream()
networkSt = tcpClient.GetStream()
[ô] le o stream em um array de bytes
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
networkSt.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
[ô] Retorna os dados recebidos do cliente para o console
Dim clientdata As String = Encoding.ASCII.GetString(bytes)
Label1.Text += [Ô]Cliente enviou : [Ô] + clientdata & vbCrLf
[ô]qualquer comunicacao com o cliente remoto usando o TcpClient pode comecar aqui
Dim responseString As String = [Ô]Conectado ao servidor.[Ô]
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(responseString)
networkSt.Write(sendBytes, 0, sendBytes.Length)
Label1.Text += [Ô]Mensagem enviada /> : [Ô] + responseString & vbCrLf
[ô]fecha TcpListener e TcpClient.
[ô]tcpClient.Close()
[ô]tcpListener.Stop()
Label1.Text += [Ô]Encerrando conexão com o servidor[Ô] & vbCrLf
Essa mensagem só retorna ao cliente na primeira vez, depois não envia mais.
Se eu repetir:
Dim responseString As String = txt_msg.text
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(responseString)
networkSt.Write(sendBytes, 0, sendBytes.Length)
Não vai mais para o cliente.
Porque ?
Peguei um exemplo do macoratti,
[ô]aceita a conexao do cliente e retorna uma inicializacao TcpClient
Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient()
Label1.Text += [Ô]Conexão aceita.[Ô] & vbCrLf
[ô] obtem o stream
[ô]Dim networkStream As NetworkStream = tcpClient.GetStream()
networkSt = tcpClient.GetStream()
[ô] le o stream em um array de bytes
Dim bytes(tcpClient.ReceiveBufferSize) As Byte
networkSt.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
[ô] Retorna os dados recebidos do cliente para o console
Dim clientdata As String = Encoding.ASCII.GetString(bytes)
Label1.Text += [Ô]Cliente enviou : [Ô] + clientdata & vbCrLf
[ô]qualquer comunicacao com o cliente remoto usando o TcpClient pode comecar aqui
Dim responseString As String = [Ô]Conectado ao servidor.[Ô]
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(responseString)
networkSt.Write(sendBytes, 0, sendBytes.Length)
Label1.Text += [Ô]Mensagem enviada /> : [Ô] + responseString & vbCrLf
[ô]fecha TcpListener e TcpClient.
[ô]tcpClient.Close()
[ô]tcpListener.Stop()
Label1.Text += [Ô]Encerrando conexão com o servidor[Ô] & vbCrLf
Essa mensagem só retorna ao cliente na primeira vez, depois não envia mais.
Se eu repetir:
Dim responseString As String = txt_msg.text
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(responseString)
networkSt.Write(sendBytes, 0, sendBytes.Length)
Não vai mais para o cliente.
Porque ?
Subindo.
Esse exemplo ele programou só para o envio de uma mensagem. O ideal seria você usar threads para isso, porque o cliente tem que ficar verificando a todo instante o recebimento de mensagem. Ele não funciona como o winsock que tinha um evento informando o recebimento das mensagens, você tem que deixar num loop e ir verificando se recebeu pacote de bytes ou não.
Espero ter ajudado.
Espero ter ajudado.
Threads e winsock são uma péssima idéia, vai por mim. Eu tentei e até funciona, mas por alguma razão a busca de valores fica muito propensa à erros.
Citação:O ideal seria você usar threads para isso
Mas eu estou utilizando.
Citação:Ele não funciona como o winsock que tinha um evento informando o recebimento das mensagens, você tem que deixar num loop e ir verificando se recebeu pacote de bytes ou não.
Sera ?
Porque a primeira mensagem eu não envio como no exemplo, automaticamente logo depois da conexão, eu envio depois por um textbox e mesmo assim o cliente recebe, só não recebe depois da primeira mensagem.
Mas a primeira ele escuta sem loop de verificação.
Citação:Threads e winsock são uma péssima idéia, vai por mim. Eu tentei e até funciona, mas por alguma razão a busca de valores fica muito propensa à erros.
Mas sem Threads deve haver travamentos, ou não ?
O que você deve colocar na thread é o tratamento dos dados. O recebimento em si, não.
Mas só de curioso, para que está usando sockets?
Citação:Mas só de curioso, para que está usando sockets?
Eu tenho meu controlador de fila de SAT para compartilhamento, mas fiz através de troca de arquivos, queria testar via socket, mas por enquanto seria para testes, já que o atual até rola, tem uma média de erro a cada 20 mil cupons, mas ainda não estou satisfeito queria erro zero.
Talvez seja mais rápida também a resposta via socket.
Acho difÃcil que você consiga com sockets um desempenho melhor que simplesmente copiando arquivos pela rede. Além disso, tem todo o problema de abrir portas no firewall, NAT e tudo mais. Vai ser ainda mais propenso à falhas, na minha opinião
Citação:Acho difÃcil que você consiga com sockets um desempenho melhor que simplesmente copiando arquivos pela rede
é o que eu quero comprovar ou não.
Tópico encerrado , respostas não são mais permitidas