WINSOCK DUVIDA!
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á!
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á!
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.
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.
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.
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!!
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!!
Obrigado:
Aà é que tá não sei como faz! ou não lembro!
de qualquer forma se tiver algum exemplo !!
Obrigado!!
Aà é que tá não sei como faz! ou não lembro!
de qualquer forma se tiver algum exemplo !!
Obrigado!!
...(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)
....
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)
....
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)
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