Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - SendAsync()
Forum - C# / VB.NET - SendAsync()

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 15:57
Giovedì, 25/06/2009
mi sono imbattuto in un altro problema.... ho aperto un nuovo thread perche quello di prima stava diventato troppo lungo... cmq... la ram non sale... ma....


    Public Sub completo(ByVal ar As Socket, ByVal asd As SocketAsyncEventArgs)
              'set del manualresetevent (in teoria)      
    End Sub

    Public Sub manda(ByRef us As User, ByVal data As String)
        data = data.Replace(Chr(10) & Chr(10), "").Replace("||", "")
        If data.EndsWith("|") = False Then
            data &= "|"
        End If
        Dim buffer() As Byte = Encoding.Default.GetBytes(data)
        impostazioni.banda += buffer.Length
        protocol.byteinviati += buffer.Length
       Try
            AddHandler us.sae.Completed, AddressOf completo
            us.sae.SetBuffer(buffer, 0, buffer.Length)
            us.client.SendAsync(us.sae)
        Catch            '"È già in corso un'operazione di socket asincrono che utilizza questa istanza SocketAsyncEventArgs.";
        End Try
    End Sub

so che mi da quell'errore perche il soft cerca di inviare piu messaggi nello stesso istante.... ma a me serve proprio quello..... come faccio a dirgli che deve aspettare che il socketeventargs sia pronto?? avevo pensato al manualresetevent... ma non deve essere lento senno non ho risolto nulla.....

PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 16:32
Giovedì, 25/06/2009
ok risolto mi bastava mettere l'addhandler non li ma dove creo il socket... pare è stabile... vedremo...

PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 17:38
Giovedì, 25/06/2009
non ho risolto proprio nulla invece... non va bene crasha... vi posto il migliore codice che avevo fatto...

Codice sorgente - presumibilmente VB.NET

  1. Public Sub completo(ByVal ar As Socket, ByVal asd As SocketAsyncEventArgs)
  2.         asd.UserToken.set()
  3.     End Sub
  4.  
  5.     Public Sub manda(ByRef us As User, ByVal data As String)
  6.         Try
  7.             us.evento.WaitOne()
  8.             data = data.Replace(Chr(10) & Chr(10), "").Replace("||", "")
  9.             If data.EndsWith("|") = False Then
  10.                 data &= "|"
  11.             End If
  12.             Dim buffer() As Byte = Encoding.Default.GetBytes(data)
  13.             impostazioni.banda += buffer.Length
  14.             protocol.byteinviati += buffer.Length
  15.             us.sae.UserToken = us.evento
  16.             us.sae.SetBuffer(buffer, 0, buffer.Length)
  17.             us.client.SendAsync(us.sae)
  18.             us.evento.Reset()
  19.         Catch
  20.         End Try
  21.     End Sub


PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 15:58
Venerdì, 26/06/2009
up!!!

Codice sorgente - presumibilmente VB.NET

  1. Public Sub completo(ByVal ar As Socket, ByVal asd As SocketAsyncEventArgs)
  2.        
  3.     End Sub
  4.  
  5.     Public Sub manda(ByRef us As User, ByVal data As String)
  6.         data = data.Replace(Chr(10) & Chr(10), "").Replace("||", "")
  7.         If data.EndsWith("|") = False Then
  8.             data &= "|"
  9.         End If
  10.         Dim buffer() As Byte = Encoding.Default.GetBytes(data)
  11.         impostazioni.banda += buffer.Length
  12.         protocol.byteinviati += buffer.Length
  13.         Try
  14.             us.sae.SetBuffer(buffer, 0, buffer.Length)
  15.             us.client.SendAsync(us.sae)
  16.         Catch
  17.         End Try
  18.     End Sub



nessuno sa perche se faccio velocelemente questa procedura mi dice che il socketeventsargs è impegnato a inviare un altro messaggio? ho modo di velocizzare la cosa?

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 16:48
Venerdì, 26/06/2009
Testo quotato

Postato originariamente da GoLDBeRG:

up!!!

Codice sorgente - presumibilmente VB.NET

  1. Public Sub completo(ByVal ar As Socket, ByVal asd As SocketAsyncEventArgs)
  2.        
  3.     End Sub
  4.  
  5.     Public Sub manda(ByRef us As User, ByVal data As String)
  6.         data = data.Replace(Chr(10) & Chr(10), "").Replace("||", "")
  7.         If data.EndsWith("|") = False Then
  8.             data &= "|"
  9.         End If
  10.         Dim buffer() As Byte = Encoding.Default.GetBytes(data)
  11.         impostazioni.banda += buffer.Length
  12.         protocol.byteinviati += buffer.Length
  13.         Try
  14.             us.sae.SetBuffer(buffer, 0, buffer.Length)
  15.             us.client.SendAsync(us.sae)
  16.         Catch
  17.         End Try
  18.     End Sub



nessuno sa perche se faccio velocelemente questa procedura mi dice che il socketeventsargs è impegnato a inviare un altro messaggio? ho modo di velocizzare la cosa?


Eccomi, di nuovo io! xD comunque prova a postare un po più di codice, così non riesco a capire del tutto come funziona :)

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:18
Venerdì, 26/06/2009
Perchè non crei una coda di richieste? Intercetti l'evento che ti indica quando ha terminato l'invio e in quell'evento metti un codice che estrae dalla coda la prima richiesta valida e la inoltra.

P.S.: per code intendo Queue(Of T).

PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 17:31
Venerdì, 26/06/2009
sembra che ho risolto cosi.....

Codice sorgente - presumibilmente VB.NET

  1. Imports System.Net.Sockets
  2. Imports System.Threading
  3. Imports System.Text
  4.  
  5. Public Class User
  6.  
  7.     Public WithEvents time As New Timers.Timer(60000)
  8.     Public WithEvents time2 As New Timers.Timer(500)
  9.     Public ultimomex As String = ""
  10.     Public ultimoconnecttome As Int64
  11.     Public ip As String = ""
  12.     Public nick As String = ""
  13.     Public share As Int64
  14.     Public isop As Boolean
  15.     Public profile As UInt16
  16.     Public ultimamyinfo As Int64
  17.     Public ultimosearch As Int64
  18.     Public ultimonicklist As Int64
  19.     Public ultimomexint As Int64
  20.     Public ultimopvt As Int64
  21.     Public ultimopvtachi As String = ""
  22.     Public conteggiomyinfo As UInteger
  23.     Public conteggiogetnicklist As UInteger
  24.     Public zline As Boolean
  25.     Public usercommand As Boolean
  26.     Public stato As String = ""
  27.     Public inizialistato As String = ""
  28.     Public myinfo As String = ""
  29.     Public altronick As String = ""
  30.     Public avvertimenti As UInt16
  31.     Public temp As String
  32.     Public falso As Boolean
  33.     Public sharenascosto As Boolean
  34.     Public loggato As Byte = 0
  35.     Public timecontrol As Int64
  36.     Public fraseparla As String = ""
  37.     Public nicklist As Boolean = False
  38.     Public cambiata As Boolean = False
  39.     Public supportotthsearch As Boolean = False
  40.     Public infomandate As Boolean = False
  41.     Public client As System.Net.Sockets.Socket
  42.     Public modalita As Char = "M"
  43.     Public contr As Byte = 0
  44.     Public ReadBuffer(1024) As Byte
  45.     Public frasi As New StringBuilder
  46.     Public passwdsend As Byte = 0
  47.     Public codice As String
  48.     Public chat As Byte = 0
  49.     Public sae As New SocketAsyncEventArgs
  50.     Public muori As Boolean = False
  51.  
  52.     Public Sub finale()
  53.         On Error Resume Next
  54.         time.Enabled = False
  55.         time2.Enabled = False
  56.         time2.Dispose()
  57.         time.Dispose()
  58.         client.Close()
  59.         frasi = Nothing
  60.         sae.Dispose()
  61.         sae = Nothing
  62.         altronick = Nothing
  63.         fraseparla = Nothing
  64.         inizialistato = Nothing
  65.         ip = Nothing
  66.         myinfo = Nothing
  67.         nick = Nothing
  68.         stato = Nothing
  69.         temp = Nothing
  70.         ultimomex = Nothing
  71.         ultimopvtachi = Nothing
  72.         modalita = Nothing
  73.         Array.Clear(ReadBuffer, 0, ReadBuffer.Length)
  74.         client = Nothing
  75.         Me.Finalize()
  76.     End Sub
  77.  
  78.     Private Sub time_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles time.Elapsed
  79.         If Me.myinfo = "" Then
  80.             Module1.mandabot("$MyINFO TimeOut", Me)
  81.             Module1.disconnettiuser(Me)
  82.             Exit Sub
  83.         End If
  84.         If Me.nick = "" Then
  85.             Module1.mandabot("$ValidateNick TimeOut", Me)
  86.             Module1.disconnettiuser(Me)
  87.             Exit Sub
  88.         End If
  89.         If Me.loggato = 0 Then
  90.             Module1.mandabot("$LOG TimeOut", Me)
  91.             Module1.disconnettiuser(Me)
  92.             Exit Sub
  93.         End If
  94.         If Me.nicklist = False Then
  95.             Module1.mandabot("$GetNickList TimeOut", Me)
  96.             Module1.disconnettiuser(Me)
  97.             Exit Sub
  98.         End If
  99.         time.Enabled = False
  100.         time.Dispose()
  101.     End Sub
  102.  
  103.     Private Sub time2_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles time2.Elapsed
  104.         Try
  105.             If muori Then
  106.                 finale()
  107.                 Exit Sub
  108.             End If
  109.             time2.AutoReset = True
  110.             Dim buffer() As Byte = Encoding.Default.GetBytes(frasi.ToString)
  111.             frasi.Remove(0, frasi.Length)
  112.             Module1.impostazioni.banda += buffer.Length
  113.             Module1.protocol.byteinviati += buffer.Length
  114.             sae.SetBuffer(buffer, 0, buffer.Length)
  115.             client.SendAsync(sae)
  116.         Catch
  117.         End Try
  118.     End Sub
  119. End Class
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  Public Sub manda(ByRef us As User, ByVal data As String)
  130.         Try
  131.             data = data.Replace(Chr(10) & Chr(10), "").Replace("||", "")
  132.             If data.EndsWith("|") = False Then
  133.                 data &= "|"
  134.             End If
  135.             us.frasi.Append(data)
  136.         Catch
  137.         End Try
  138.     End Sub



in pratika ogni 250 millisecondi invio il buffer dei messaggi da inviare.... il buffer lo riempo mano mano che devo mandargli messaggi cosi prima raccolgo raccolgo poi ogni 250 millisecondi invio il tutto e svuoto... a funzionare funziona.... ma non lo so.... secondo voi è stabile?

Ultima modifica effettuata da GoLDBeRG il 26/06/2009 alle 17:33
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 17:41
Venerdì, 26/06/2009
:-| :pat: con tutto questo codice è un po difficile dire se potrebbe essere stabile :) la prova pratica in questo caso è la prova del nove, per cui armati di Debug e dicci tutto :D

PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 18:21
Venerdì, 26/06/2009
crasha su un pc dsl a 240 client circa... credo perche gli manchi banda e non sa cosa fare allora crasha.... al piu presto lo provo su server e vi dico... cmq 250 client 15 mb di ram....

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo