DIFICULDADE COM WINSOCK
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
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
Por favor, alguém me de uma luz !!! plzz !!! =(
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
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
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....
exemplo: sckmaq e sckcentral, o que irá receber as mensagens será o sckcentral, portanto o sckmaq enviará as 2 informações....
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
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
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...
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"
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"
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
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
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...
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
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