PROBLEMAS COM SOCKETS

FILIPEBSANTOS 18/02/2011 20:41:32
#365924
Boa noite pessoal!

Tenho uma aplicação cliente/servidor que no momento esta me dando um certa dor de cabeça!

Para preencher uma listview o cliente manda a requisição para o servidor, e servidor manda de volta dos dados para preencher a lisview:

[txt-size=2]-Servidor-[/txt-size]

  
Public Sub ListaProdutor(ByVal Index As Integer)
Dim Socket As String
Dim I As Integer

Call Verifica_Conexao
Call Conecta_BD
Set RS = Conexao.Execute([Ô]SELECT * FROM PRODUTOR[Ô])

If RS.RecordCount = 0 Then
Call Msg(Index, [Ô]Não há produtores cadastrados![Ô], 2)
Exit Sub
End If

While Not RS.EOF

Socket = [Ô]P_LISTA[Ô] & SEP_CHAR & RS(0) & SEP_CHAR & RS(1) & SEP_CHAR & RS(2) & SEP_CHAR & RS(3) & SEP_CHAR & RS(4) & SEP_CHAR & RS(5)

Call EnviarSocket(Index, Socket)
Socket = [Ô][Ô]

RS.MoveNext
Wend
End Sub


[txt-size=2]-Cliente-[/txt-size]

Sub PreencheListaProdutor(ByVal CodProd As Double, ByVal Nome As String, ByVal Sobrenome As String, ByVal Email As String, ByVal Acesso As Byte, ByVal Login As String)
Dim lst As ListItem

Set lst = frmCadProdutor.lstProdutores.ListItems.Add(, , CodProd)
lst.SubItems(1) = Nome
lst.SubItems(2) = Sobrenome
lst.SubItems(3) = Email

If Acesso = 1 Then
lst.SubItems(4) = [Ô]Operador[Ô]
ElseIf Acesso = 2 Then
lst.SubItems(4) = [Ô]Supervidor[Ô]
ElseIf Acesso = 3 Then
lst.SubItems(4) = [Ô]Administrador[Ô]
End If

lst.SubItems(5) = Login
End Sub


O primeiro chega direitinho: P_LISTA§dado§dado§...§dado e é colocado corretamente na list view!

Porem a partir do segundo o servidor começa a juntar tudo e o packet vem assim: P_LISTA§dado§dado...§dadoP_LISTA§dado§dado§ e assim por diante.

Tentando resolver o problema tenti limpar o socket antes de envia-lo novamente. No código acima tem Socket = [Ô][Ô]
Mas mesmo assim não resolveu o problema. Então tentei da uma pausa de 1seg antes de enviar novamente. Deu certo ele mando todos os sockets separados. Mas a lista é preenchiada a cada 1seg e fica um tanto lento.

Ou seja qual seria uma alternativa para contornar este problema?
LLAIA 18/02/2011 21:49:38
#365930
Mostre a chamada da Sub PreencheListaProdutor
FILIPEBSANTOS 18/02/2011 23:57:06
#365936
    Socket.GetData Dados

Pacote() = Split(Dados, SEP_CHAR)

If Pacote(0) = [Ô]P_LISTA[Ô] Then
Call PreencheListaProdutor(Val(Pacote(1)), Pacote(2), Pacote(3), Pacote(4), Val(Pacote(5)), Pacote(6))
End If


é esse ai.

FILIPEBSANTOS 20/02/2011 23:13:07
#366078
Já resolvi o problema! Ao invés de enviar um socket de cada vez para o cliente o servidor faz um pacote só com todos os produtores e envia para o cliente. O cliente quando recebe separa os produtores e preenche a listview.
Tópico encerrado , respostas não são mais permitidas