1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

VB 2008 WinsockOrcas

Discussão em 'Programação' iniciada por Diogo Pinho, 24 de Novembro de 2008. (Respostas: 1; Visualizações: 432)

  1. Diogo Pinho

    Diogo Pinho Power Member

    bem estou a ver se faço um pequeno 4 em linha online
    e o meu problema chega na altura de fazer o data arrival :S

    eu consigo fazer o listen o connectionrequest etc

    mas quando chega na parte de fazer o send por parte do "client" devia entrar na parte do dataarrival do "host" mas não dá ele nem entra no data arrival

    alguem tem alguma luz sobre o assunto?
    é que queria ver se fazia isto hoje =D
     
  2. fLaSh_CF

    fLaSh_CF Banido

    O edeal para isso é criares classes..
    Para o servidor usas "TcpListener"

    Fazes algo do tipo:
    Inherits TcpListener

    Herdas o objecto.. dentro da classe poes os procedimentos.. (tipo Start/Stop/etc..)
    O ideal para isto é utilizar threads para cada conexão..

    Tipo:
    Código:
    nomeThread = New Threading.Thread(AddressOf Connectionrequest_SUB)
    nomeThread.Start
    Dentro do Sub Connectionrequest_SUB.. poens um apontador para os eventos do cliente (tipo dataarrivel, connectionclose, etc..

    Ex (este codigo vem de um projecto q elaborei):
    Código:
        Protected Sub ListenForClients()
            '------------------------------------------------------------------
            'Purpose:   
            '
            'Params:
            '           
            '
            'Returns:   
            '------------------------------------------------------------------
            Dim objSocket As Socket = Nothing
            Dim strIP As String = String.Empty
            Dim objUser As clsUser = Nothing
    
            Try
    
                Application.DoEvents()
    
                Do
    
                    objSocket = TryCast(m_objTcpListener.AcceptSocket, Socket)
    
                    'Freze the thread
                    Threading.Thread.Sleep(300)
    
                    If objSocket IsNot Nothing Then
                        SyncLock objSocket
                            'Get the IP address
                            strIP = TryCast(CType(objSocket.RemoteEndPoint, IPEndPoint).Address.ToString, String)
                            If Not String.IsNullOrEmpty(strIP) Then
                                'Run the PreConnectionRequest event
                                If g_objEvents.PreConnectionRequest(strIP) = False Then
                                    'Create user object
                                    objUser = New clsUser(objSocket)
                                    'Set empty name
                                    objUser.Name = NO_NAME
                                    'Add user to collection
                                    m_oConnectionRequest.Invoke(objUser)
                                    'Start login sequene
                                    objUser.SendData("$Lock " & vbLock & "|$HubName " & g_objSettings.HubName & "|")
                                    'Add to collection
                                    m_colUsers.Add(objSocket, objUser.ID)
                                End If
                            End If
                        End SyncLock
                    End If
    
                Loop Until False
    
            Catch ex As Exception
                'Err.Number = 5: Thread was being aborted.
                If Not Err.Number = 5 Then
                    ErrHandle(ex, m_cClassName & ".ListenForClients()")
                End If
                If objUser IsNot Nothing Then objUser = Nothing
                If objSocket IsNot Nothing Then objSocket = Nothing
            End Try
        End Sub
    Para o client é algo mais simples.. crias algo similar mas com o obecto TcpClient

    Compr.
     

Partilhar esta Página