WINSOCK VB.NET
Olá pessoal do VBMania, venho aqui sempre que tenho duvidas pois aqui sempre sou respondido e com 100% de eficiencia...
podem ter certeza que ja testei de tudo e nao estou conseguindo, entao venho aqui para pedir ajuda...
bom estou fazendo uma aplicação, seria um sistema de protect para um cliente, esse sistema utiliza o winsock pra ver a porta XXXX que se conecta a um servidor, feito tambem no aplicativo, ele funciona + - assim:
abre o servidor, envia um dado para porta XXX abre um aplicativo externo e retorna pro cliente, mantendo asim o programa funcionando, se caso a comunicação do server com cliente for perdida, ele fecha tanto o protect qto o aplicativo externo... exemplo
protect > aplicativo externo > cliente -
î_____________________________|
caso o protect ou o aplicativo externo seja fechado, irá fechar tudo.... a parte de fechar e se comunicar esta feita, porém to com os seguintes erros, segue o codigo completo da parte server/cliente
primeiramente estou tendo o seguinte erro:
error BC30560: [ô]StateConstants[ô] is ambiguous in the namespace [ô]MSWinsockLib[ô]
nesta linha:
If AxWinsock1.CtlState = MSWinsockLib.StateConstants.sckConnected Then
isso começou a dar erro depois de inumeras tentativas de tentar arrumar, antes dava a seguinte exceção na mesma linha:
[Ô]A Propriedade GET de [ô]CTLState[ô] não pode ser chamada neste momento[Ô]
porem este erro acima so acontece no win 7 64bit
caso nao entendam por favor perguntem novamente...
agradeço a ajuda desde ja
abraços!
podem ter certeza que ja testei de tudo e nao estou conseguindo, entao venho aqui para pedir ajuda...
bom estou fazendo uma aplicação, seria um sistema de protect para um cliente, esse sistema utiliza o winsock pra ver a porta XXXX que se conecta a um servidor, feito tambem no aplicativo, ele funciona + - assim:
abre o servidor, envia um dado para porta XXX abre um aplicativo externo e retorna pro cliente, mantendo asim o programa funcionando, se caso a comunicação do server com cliente for perdida, ele fecha tanto o protect qto o aplicativo externo... exemplo
protect > aplicativo externo > cliente -
î_____________________________|
caso o protect ou o aplicativo externo seja fechado, irá fechar tudo.... a parte de fechar e se comunicar esta feita, porém to com os seguintes erros, segue o codigo completo da parte server/cliente
Imports System.Diagnostics
Imports MSWinsockLib
Public Class FrmCliente
Inherits System.Windows.Forms.Form
Private Sub FrmCliente_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim frmServer As New FrmServer
Me.Visible = False
frmServer.Show()
frmServer.Visible = False
If AxWinsock1.CtlState = MSWinsockLib.StateConstants.sckConnected Then
MessageBox.Show([Ô]Server is already connected[Ô])
Exit Sub
Else
[ô]Diagnostics.Process.Start([Ô]GXSoft.exe[Ô])
Dim conecta As New MSWinsockLib.Winsock
conecta.RemoteHost = [Ô]127.0.0.1[Ô]
[ô]AxWinsock1.RemoteHost = [Ô]127.0.0.1[Ô]
conecta.RemotePort = 10010
[ô]AxWinsock1.RemotePort = 10010
conecta.Connect()
[ô]AxWinsock1.Connect()
End If
[ô] Form1.DefInstance.IsInitializing = False
End Sub
Private Sub AxWinsock1_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent)
Dim strData As Object
Dim i As Integer
Dim tstring As String
strData = 0
tstring = [Ô][Ô]
Dim conecta As New MSWinsockLib.Winsock
AxWinsock1.GetData(strData)
For i = 0 To UBound(strData)
tstring = tstring + Chr(strData(i))
Next
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim conecta As New MSWinsockLib.Winsock
If AxWinsock1.CtlState <> conecta.State Then
[ô]MsgBox([Ô]fecha[Ô])
[ô]Close()
Form1.Close()
Timer1.Enabled = False
Timer1.Interval = 1
End If
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Timer1.Interval = 1000
Timer1.Enabled = True
End Sub
Private Sub AxWinsock1_ConnectEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AxWinsock1.ConnectEvent
End Sub
End Class
Imports MSWinsockLib
Public Class FrmServer
Private Sub AxWinsock1_DataArrival(ByVal sender As System.Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles AxWinsock1.DataArrival
[ô]MessageBox.Show([Ô]data arrived[Ô])
Dim strData As Object
Dim i As Integer
Dim tstring As String
strData = 0
tstring = [Ô][Ô]
AxWinsock1.GetData(strData)
For i = 0 To UBound(strData)
tstring = tstring + Chr(strData(i))
Next
End Sub
Private Sub AxWinsock1_ConnectionRequest(ByVal sender As System.Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent) Handles AxWinsock1.ConnectionRequest
If AxWinsock1.CtlState <> MSWinsockLib.StateConstants.sckConnected Then
AxWinsock1.Close()
End If
[ô]ì½Ó¡£
AxWinsock1.Accept(e.requestID)
End Sub
Private Sub FrmServer_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AxWinsock1.LocalPort = 10010 [ô]˳ÃòºÜÖØÒªportÒªÔÚlistenÇ°Ãæ
AxWinsock1.Listen()
End Sub
End Class
primeiramente estou tendo o seguinte erro:
error BC30560: [ô]StateConstants[ô] is ambiguous in the namespace [ô]MSWinsockLib[ô]
nesta linha:
If AxWinsock1.CtlState = MSWinsockLib.StateConstants.sckConnected Then
isso começou a dar erro depois de inumeras tentativas de tentar arrumar, antes dava a seguinte exceção na mesma linha:
[Ô]A Propriedade GET de [ô]CTLState[ô] não pode ser chamada neste momento[Ô]
porem este erro acima so acontece no win 7 64bit
caso nao entendam por favor perguntem novamente...
agradeço a ajuda desde ja
abraços!
Pois é amigo, tive o mesmo problema com o winsock em Win7 somente 64bits e descobri que algumas ocx devem ser registradas de uma forma diferente, resolveu meu problema, mas infelizmente o winsock não ficou 100% não, as vezes dava uns erros nada a ver. Veja se te ajuda, pois para registrar OCX em win7 64bits é um pouco diferente:
1-) Abra o Explorer como administrador (Botão direito [Ô]Executar como Administrador[Ô])
2-) Coloque as que vc quer registrar não mais no C:\WINDOWS\SYSTEM32 e sim dentro da pasta [Ô]C:\WINDOWS\SYSWOW64[Ô]
3-) Abra o Prompt de Comandos tbm em modo Administrador (senão não vai funcionar mesmo) e digite: REGSVR32 C:\WINDOWS\SYSWOW64\sua_ocx.ocx
Qualquer coisa pode postar de novo.
Abraços galera t+ !!!!!!
1-) Abra o Explorer como administrador (Botão direito [Ô]Executar como Administrador[Ô])
2-) Coloque as que vc quer registrar não mais no C:\WINDOWS\SYSTEM32 e sim dentro da pasta [Ô]C:\WINDOWS\SYSWOW64[Ô]
3-) Abra o Prompt de Comandos tbm em modo Administrador (senão não vai funcionar mesmo) e digite: REGSVR32 C:\WINDOWS\SYSWOW64\sua_ocx.ocx
Qualquer coisa pode postar de novo.
Abraços galera t+ !!!!!!
Olá ESLEYSANCHES,
obrigado pela resposta,
o erro de ambiguidade eu consegui resolver, trocando a constante pelo valor dela...
no caso:
If AxWinsock1.CtlState = MSWinsockLib.StateConstants.sckConnected Then
mudei para
If AxWinsock1.CtlState = 7 Then
consegui compilar mas ainda estou tendo problemas... o aplicativo gera uma exceção com a seguinte mensagem:
[Ô]A Propriedade GET de [ô]CTLState[ô] não pode ser chamada neste momento[Ô]
abraços
obrigado pela resposta,
o erro de ambiguidade eu consegui resolver, trocando a constante pelo valor dela...
no caso:
If AxWinsock1.CtlState = MSWinsockLib.StateConstants.sckConnected Then
mudei para
If AxWinsock1.CtlState = 7 Then
consegui compilar mas ainda estou tendo problemas... o aplicativo gera uma exceção com a seguinte mensagem:
[Ô]A Propriedade GET de [ô]CTLState[ô] não pode ser chamada neste momento[Ô]
abraços
Olha amigo fucei um pouco na NET em foruns internacionais e todos tem o mesmo problema que vc.
Na verdade eu estava olhando e um usuario falou que o maior problema é que o winsock possui uma propriedade usada para pegar o valor de stado do socket (State) que causa problemas com sistemas 64bits e normalmente até mesmo em 32bits (Sendo win7).
Aparentemente nós que amamos o Winsock6 teremos que aprender a usar o System.Net.Sockets (que por sinal achei um lixo, mas achei lixo pq é muito dificill rsrs).
Segue alguns links de forums internacionais que eu procurei:
http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-vb/56183/Winsock-6-control-in-VB-NET
http://www.codeguru.com/forum/showthread.php?t=432684
E claro, pesquisei no google assim: vb.net error ocx Winsock.ocx
Veja se algo te ajuda, vou procurar tbm, pois eu tbm tenho a mesma necessidade !!!!
Flw abraços !!!
Na verdade eu estava olhando e um usuario falou que o maior problema é que o winsock possui uma propriedade usada para pegar o valor de stado do socket (State) que causa problemas com sistemas 64bits e normalmente até mesmo em 32bits (Sendo win7).
Aparentemente nós que amamos o Winsock6 teremos que aprender a usar o System.Net.Sockets (que por sinal achei um lixo, mas achei lixo pq é muito dificill rsrs).
Segue alguns links de forums internacionais que eu procurei:
http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-vb/56183/Winsock-6-control-in-VB-NET
http://www.codeguru.com/forum/showthread.php?t=432684
E claro, pesquisei no google assim: vb.net error ocx Winsock.ocx
Veja se algo te ajuda, vou procurar tbm, pois eu tbm tenho a mesma necessidade !!!!
Flw abraços !!!
Amigo, voltei para dizer o seguinte:
Depois de registar a OCX do jeito que eu falei, feche o visual Studio e seu projeto, abra de novo porém em modo Administrador, clique com o botão direito no VisualStudio e selecione a opção de executar como ADM e veja se ajuda !!!
EDIT:
Que bllzzz !! Aqui funcionou amigo, certinho em WIN7, consegui listar (Escutar) na porta 5000 fazer conexão enviar e receber dados (Textos puros). rsrs
Teste ai depois grita !!! rsrs
Abraços !!
Depois de registar a OCX do jeito que eu falei, feche o visual Studio e seu projeto, abra de novo porém em modo Administrador, clique com o botão direito no VisualStudio e selecione a opção de executar como ADM e veja se ajuda !!!
EDIT:
Que bllzzz !! Aqui funcionou amigo, certinho em WIN7, consegui listar (Escutar) na porta 5000 fazer conexão enviar e receber dados (Textos puros). rsrs
Teste ai depois grita !!! rsrs
Abraços !!
ola esley,
eu registrei a OCX, porem a linha ainda da como ambiguous... entao subsitui a linha por 7,,,, que é o valor da constante que representa a linha q esta com erro...
eu vou tentar abrir o VS comoo adm pra ver se funciona, mas nao creio ser isso que está acontecendo comigo nao...
vlw e jaja reporto
abraços!
eu registrei a OCX, porem a linha ainda da como ambiguous... entao subsitui a linha por 7,,,, que é o valor da constante que representa a linha q esta com erro...
eu vou tentar abrir o VS comoo adm pra ver se funciona, mas nao creio ser isso que está acontecendo comigo nao...
vlw e jaja reporto
abraços!
é continuo com o mesmo erro,
[Ô]A Propriedade GET de [ô]CTLState[ô] não pode ser chamada neste momento[Ô]
no aguardo e tentando!
[Ô]A Propriedade GET de [ô]CTLState[ô] não pode ser chamada neste momento[Ô]
no aguardo e tentando!
Puts que aqui funcionou legal ...
Faça outro teste ?? rsrs
Abra o VS 2008 como adm normal igual vc fez, va no meu Project selecione a ultima opção -> Seu_Projeto Properties em seguida do lado esquerdo selecione a opção Complie
Depois procure Plataform e selecione a opção X86 ou AnyCPU e veja se compila, não deixe compilar em 64bits. E novamente teste. rsrs
Qualquer coisa grite ae de novo
Abraços !!!!
Faça outro teste ?? rsrs
Abra o VS 2008 como adm normal igual vc fez, va no meu Project selecione a ultima opção -> Seu_Projeto Properties em seguida do lado esquerdo selecione a opção Complie
Depois procure Plataform e selecione a opção X86 ou AnyCPU e veja se compila, não deixe compilar em 64bits. E novamente teste. rsrs
Qualquer coisa grite ae de novo
Abraços !!!!
Ola esley,
minha compilação ja esta como AnyCPU...
realmente nao sei mais oque fazr, se eu ainda soubesse o porque gera essa exceção...sei la...falta conexao algo do tipo...mas n faço nem ideia do PORQUE dessa exceção!
abraços e vlw, procurando solução!
minha compilação ja esta como AnyCPU...
realmente nao sei mais oque fazr, se eu ainda soubesse o porque gera essa exceção...sei la...falta conexao algo do tipo...mas n faço nem ideia do PORQUE dessa exceção!
abraços e vlw, procurando solução!
ola ocelot, primeiramente valeu pela dica,
bom eu vi se tem opção de x86 la mas nao tem...soh posso escolher anycpu
esse sockets, eu nunca mexi, mas vou deixar aqui minha pretenção caso alguem possa medar uma luz:
tenho um aplicativo que chama outro aplicativo.... eu fiz com o winsock, o sistema de controle, para nao deixar fechar um e continuar o outro....
exemplo
tenho prog1 e prog2....
o prog1 abre o prog2, e fica em conexao atravez do winsock, caso algum deles seja fechado, o outro fecha tambem
OBS: ja estou pesquisando sobre o sockets do .net... quem puder dar uma luz valeu
abraços!
bom eu vi se tem opção de x86 la mas nao tem...soh posso escolher anycpu
esse sockets, eu nunca mexi, mas vou deixar aqui minha pretenção caso alguem possa medar uma luz:
tenho um aplicativo que chama outro aplicativo.... eu fiz com o winsock, o sistema de controle, para nao deixar fechar um e continuar o outro....
exemplo
tenho prog1 e prog2....
o prog1 abre o prog2, e fica em conexao atravez do winsock, caso algum deles seja fechado, o outro fecha tambem
OBS: ja estou pesquisando sobre o sockets do .net... quem puder dar uma luz valeu
abraços!
Tópico encerrado , respostas não são mais permitidas