WINSOCK DUVIDA!

FABIANOALVES007 29/12/2011 09:01:37
#392091
Bom dia a todos:
Estou com uma dúvida, que talvez seja muito simples de resolver(ou não)!
Estou usando o componente winsock para enviar dados para um sistema remoto! até aí tudo bem!
O problema é o seguinte:
preciso enviar dados diferentes de uma só vez: Por exemplo:

tcpClient01.SendData imagem.Text

Ok: assim manda certinho! do outro lado o outro sistema interpreta corretamente o que mandei!

minha dúvida:
se eu mando assim:
tcpClient01.SendData imagem.Text
tcpClient01.SendData imagem1.Text
tcpClient01.SendData imagem2.Text

sai tudo junto do outro lado:

Gostaria de saber se há algum jeito de enviar vários dados diferentes de uma vez:
isso usando apenas um winsock, pois terei vários, cada um executando muitas funções de envio!

tipo: [Ô]sei q abaixo está errado[Ô]
tcpClient01.SendData(1) imagem.Text
tcpClient01.SendData(2) dados1.Text
tcpClient01.SendData(3) dres.caption ... assim por diante

e do outro lado:

Dim strdata(1) As String
tcpServer01.GetData strdata(1)
Dim strdata(2) As String
tcpServer01.GetData strdata02
Dim strdata(3) As String
tcpServer01.GetData strdata(3)

Agradeço desde já!
DANIELCPAETE 29/12/2011 09:10:13
#392092
Amigo se deseja mandar muitas informações ao mesmo tempo tera problemas certo, pois o VB6 não é multthread, existem algumas gambiarras que podem ser feitas, mas mesmo assim vai enfrentar alguns problemas, procura por winsock multthread VB6 no google que vai encontrar diversas paginas falando sobre o assunto.
KERPLUNK 29/12/2011 09:24:34
#392094
Resposta escolhida
Bem, vamos por partes:
1 - Quando o componente winsock envia informações, não necessariamente elas sairão na hora e chegarão na hora, portanto não se pode saber a exata hora do envio.
2 - O envio, não é responsabilidade do componente somente, mas sim de todo o pool do TCP. Ou seja, pode acontecer do pool esperar um tempo, acumular informação e depois enviar, o que é exatamente o que acontece com vc.
3 - Enviar informações não é algo que se pode fazer desestruturadamente. Não é uma boa idéia enviar somente o valor da informação, o ideal é enviar alguma outra coisa [Ô]explicando[Ô] o que é essa informação, por exemplo:
O que vc está fazendo: tcpClient01.SendData imagem.Text
O que vc deveria fazer: tcpClient01.SendData [Ô]{Imagem: [Ô] & imagem.Text & [Ô]};[Ô]
Dessa maneira o que chegaria no outro lado do socket seria:
[Ô]{Imagem: ALGUMA_COISA};[Ô]
Fazendo assim também para os outros campos, mesmo que chegue [Ô]tudo de uma vez[Ô] vc consegue separar uma coisa da outra.
4 - Realmente o VB6 não é thread-safe, como o .NET, mas [Ô]implementar[Ô] threads no VB6, apesar de possível, não é muito seguro e nem muito simples.
FABIANOALVES007 29/12/2011 10:52:33
#392104
Legal!
por ex:
enviei isto:
tcpClient01.SendData [Ô]{Imagem: [Ô] & imagem.Text & [Ô]};[Ô][Ô]{nome: [Ô] & nn.Text & [Ô]};[Ô][Ô]{Sobrenome: [Ô] & ss.Text & [Ô]};[Ô]

do outro lado:
{Imagem: c:\fts\Foto0269.jpg};[Ô]{nome: Fabiano};[Ô]{Sobrenome: Alves};

como faço pra desmembrar?
pra usar o dados separadamente:
label1.caption=[Ô]Fabiano[Ô]
label2.caption=[Ô]Alves[Ô]
assim por diante!

Obrigado!!
FABIANOALVES007 29/12/2011 14:01:17
#392121
Obrigado:
Aí é que tá não sei como faz! ou não lembro!
de qualquer forma se tiver algum exemplo !!
Obrigado!!
KERPLUNK 29/12/2011 14:24:00
#392122
...(seu código para recepção de pacotes do winsock)
dim OQueChegou as string
[ô]OQueChegou, é uma variável que coloquei para simbolizar O QUE EHCGOU no winsock, auto-explicativa, eu acho
OQueChegou =[Ô]{Imagem: c:\fts\Foto0269.jpg};[Ô]{nome: Fabiano};[Ô]{Sobrenome: Alves};[Ô]
dim splitado
splitado = Split(OQueChegou, [Ô];[Ô])
[ô]A variável [Ô]splitado[Ô] vai ser um array com os valores separados por ponto e vírgula, mais ou menos assim:
[ô]splitado(0) vai ser [Ô]{Imagem: c:\fts\Foto0269.jpg}[Ô]
[ô]splitado(1) vai ser [Ô][Ô]{nome: Fabiano}[Ô] ... e assim por diante

[ô]Agora, basta colocar esses valores nos controles:
label1.caption = splitado(0)
label2.caption = splitado(1)
....
FABIANOALVES007 29/12/2011 15:17:53
#392128
Valeu amigo!
Perfeito!
[ô]enviar:
tcpClient01.SendData [Ô][Ô] & imagem.Text & [Ô];[Ô]
tcpClient01.SendData [Ô][Ô] & nn.Text & [Ô];[Ô]
tcpClient01.SendData [Ô][Ô] & ss.Text & [Ô];[Ô]

[ô]receber:

Dim strdata01 As String
tcpServer01.GetData strdata01

Dim splitado01
splitado01 = Split(strdata01, [Ô];[Ô])

endfoto.Caption = splitado01(0)
nome.Caption = splitado01(1)
sobrenome.Caption = splitado01(2)

Tópico encerrado , respostas não são mais permitidas