DIFICULDADE COM WINSOCK

USUARIO.EXCLUIDOS 03/06/2005 16:25:02
#86878
Tenho duas aplicações em computadores diferentes conectadas pelo winsock na rede, preciso enviar duas informações para o outro computador da rede... estou tendo problemas para enviá-las, ou recebê-las, não sei o que acontece.

Eu fiz assim...em uma máquina

sckmaq.senddata info1
sckmaq.sendata info2

enquanto na outra maquina no evento dataarrival do winsock eu coloquei

sck1.getdata informacao1
sck1.getdata informacao2

O problema é q as variaveis info1 e info 2 ficam concatenada na variavel informacao1 e a variavel informacao 2 fica vazia

Eu precisava que informacao1=info1 e informacao2 = info2, sem usar duas conexões pelo winsock... obrigado
USUARIO.EXCLUIDOS 03/06/2005 23:37:06
#86928
Por favor, alguém me de uma luz !!! plzz !!! =(
FABIO.ALEXANDRE 04/06/2005 00:26:32
#86933
Resposta escolhida
CARA C TEM Q FAZER UM TRATAMENTO ANTES DE ENVIAR A SEGUNDA MENSAGEM
VERIFICANDO C JA FOI ENVIADO COMPLETAMENTE A PRIMEIRA

sck1.getdata informacao1
IF BTERMINOU THEN sck1.getdata informacao2

VERIFICA COM ESSE EVENTO

Private Sub Winsock1_SendComplete()
BTERMINOU=TRUE
End Sub

ESPERO TER AJUDADO
USUARIO.EXCLUIDOS 04/06/2005 12:06:16
#86979
Fabio, eu entendi a lógica de ter que fazer esse tratamento, porém não consegui utilizar esse código para fazer o tratamento, eu só terei que fazer o tratamento em uma aplicação só ? ( o que irá receber as duas mensagens ), ou na que enviar também...

exemplo: sckmaq e sckcentral, o que irá receber as mensagens será o sckcentral, portanto o sckmaq enviará as 2 informações....
FABIO.ALEXANDRE 04/06/2005 14:01:30
#86993
BOM
ESSE CÓ“DIGO NO APLICATIVO SERVIDOR


Private Sub wsServidor_DataArrival(ByVal bytesTotal As Long)

Dim var_cCominicacao As String '1=pergunta;2=Reposta ;Machine;Funcao
Dim var_cMachineLog As String
Dim var_cFuncao As String

On Error GoTo erro_

wsServidor.GetData var_cCominicacao

If Mid(var_cCominicacao, 1, 1) = "1" Then
var_cMachineLog = Mid(var_cCominicacao, 2, InStr(3, var_cCominicacao, ";") - 2)
var_cFuncao = Mid(var_cCominicacao, InStr(var_cCominicacao, ";") + 1)
Select Case UCase(var_cFuncao)
Case "O"
Call sb_Situacao_Termnal(var_cMachineLog, "ABERTO")
var_cCominicacao = "2" & Trim(var_cLetreiro) & ";L"
wsServidor.Close
wsServidor.Connect var_cMachineLog, 101
Do While var_nConect <> 1
If var_nConect = 2 Then
Exit Sub
End If
DoEvents
Loop
var_nConect = 0
wsServidor.SendData var_cCominicacao
Do While Not var_bSednComplete
DoEvents
Loop
Case "F"
Call sb_Situacao_Termnal(var_cMachineLog, "FECHADO")
End Select
Else
var_cMachineLog = Mid(var_cCominicacao, 2, InStr(3, var_cCominicacao, ";") - 2)
var_cFuncao = Mid(var_cCominicacao, InStr(var_cCominicacao, ";") + 1)
Select Case UCase(var_cFuncao)
Case "O"
SaveSetting "SGGBusiness", "Logow", "Letreiro", var_cMachineLog
End Select
End If

wsServidor.Close
wsServidor.LocalPort = 101
wsServidor.Listen

Exit Sub
erro_:
MsgBox Err.Description & " " & Err.Number, vbCritical, "wsServidor_DataArrival"
End Sub

RESUMINDO PRA VC FICA + OU - ASSIM

Private Sub wsServidor_DataArrival(ByVal bytesTotal As Long)

On Error GoTo erro_

wsServidor.GetData var_cCominicacao

' ESSA LINHA FAZ COM ELE FICA NA ESCUTA DOS CLIENTES
wsServidor.Close
wsServidor.LocalPort = 101
wsServidor.Listen

Exit Sub
erro_:
MsgBox Err.Description & " " & Err.Number, vbCritical, "wsServidor_DataArrival"
End Sub


ESPERO TER AJUDADO
USUARIO.EXCLUIDOS 04/06/2005 18:52:35
#87012
Puts cara, acho que você não entendeu, eu fiz tudo certo, a conexão, etc. e tal.... só quero saber como faço pra enviar as 2 informações de uma só vez e recebê-las de uma só vez...
USUARIO.EXCLUIDOS 05/06/2005 15:11:25
#87116
Tenho uma opnião, porque vc não envia um único valor e desmembra quando receber...
exemplo

Onde se envia:

Dim info1,info2 as String
info1 = "valor1#" << o "#" usa-se para separar ao receber
info2 = "valor2"
sck1.sendData info1 & info2

Onde se recebe:
Dim valores as String
Dim infos() as String
sck1.getData valores
infos = Split(valores,"#") '<<O "#" antes colocado separa em um vetor
'logo, o que era "valro1#valor2" virou um vetor onde
infos(0) = "valor1"
infos(1) = "valor2"
D4RK.V1RU5 05/06/2005 15:52:43
#87133
Eu acho mais facil usar um winsock para cada informaçao
ficaria assim
envia:
Option Explicit
Private Sub Conectar_Click()
Winsock1.RemotePort = "12"
Winsock1.LocalPort = "13"
Winsock1.Connect "o ip q vc quiser"
Winsock2.RemotePort = "11"
Winsock2.LocalPort = "14"
Winsock2.Connect "o ip q vc quiser"
End Sub
Private Sub Enviar_Click()
Winsock1.SendData info1
Winsock2.SendData info2
End Sub
Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
MsgBox "Erro na conexão ou o ip nao existe", vbExclamation, "Erro"
End Sub

Recebe:
Option Explicit
Private Sub Form_Load()
Winsock1.LocalPort = "12"
Winsock1.Listen
Winsock2.LocalPort = "11"
Winsock2.Listen
End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close
Winsock1.Accept requestID
End Sub
Private Sub Winsock2_ConnectionRequest(ByVal requestID As Long)
Winsock2.Close
Winsock2.Accept requestID
End Sub
Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim info1 As String
Dim info2 As String

Winsock1.GetData info1
Winsock2.GetData info2

End Sub

espero ter ajudado
USUARIO.EXCLUIDOS 05/06/2005 19:45:30
#87162
Desculpa aew galera, mas eu consegui solucionar minha dúvida, graças a primeira resposta do Fábio, irei deixar o tópico aberto para vocês verem o que eu fiz... Obrigado a todos que responderam...
USUARIO.EXCLUIDOS 07/06/2005 15:12:19
#87483
Valeu Fábio, com a sua resposta eu consegui chegar a solução, foi preciso fazer um tratamento, mas eu não fiz do jeito que você falou com SendComplete por que a variável não estava carregando o valor como você falou, então eu fiz assim, um jeito que deu certo... Obrigado a todos !!!!!

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
If bterminou = 1 Then
Winsock1.GetData informacao2
Else
Winsock1.GetData informacao1
bterminou = 1
End If
End Sub

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