WINSOCK VB.NET

NAM4 01/02/2011 23:37:29
#364065
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


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!
ESLEYSANCHES 02/02/2011 07:58:16
#364075
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+ !!!!!!
NAM4 02/02/2011 11:23:22
#364098
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
ESLEYSANCHES 02/02/2011 12:05:59
#364102
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 !!!
ESLEYSANCHES 02/02/2011 12:07:30
#364104
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 !!
NAM4 02/02/2011 15:40:25
#364139
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!
NAM4 02/02/2011 15:52:26
#364143
é continuo com o mesmo erro,

[Ô]A Propriedade GET de [ô]CTLState[ô] não pode ser chamada neste momento[Ô]



no aguardo e tentando!
ESLEYSANCHES 02/02/2011 19:07:34
#364159
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 !!!!
NAM4 03/02/2011 22:07:37
#364304
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!
NAM4 03/02/2011 23:21:32
#364310
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!
Tópico encerrado , respostas não são mais permitidas