Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [VB 2005 Express] Come catturare un comando net send ??

    Salve a tutti, mi trovo in questa situazione, ho una macchina che comunica uno stato di errore tramite un banale messaggio inviato a un PC B con un net send. Bene volevo sapere se sapete un metodo semplice per catturare l'evento di ricezione del messaggio in modo da scatenare un invio email di avviso.
    Io nella mia ignoranza ho analizato la faccenda nel senso che quando arriva il net send sul PC B viene aggiunto un evento al registro di sistema, quindi con un ciclo controllo in continuazione lo stato del registro e appena scatta l'evento voluto invio l'email. Funziona solo che A: mi occupa la cpu al 99% (colpa della mia niubbaggine) B: può capitare che vengano mandate via tipo 6 7 mail al colpo visto che gli ho impostato di non eseguire il controllo dentro nel loop se il time dell'ultimo evento nel registro relativo al netsend è <= di un secondo del tempo attuale.
    Ovviamente sono novello a VB NET ma se qualcuno mi può dare qualche dritta ne sarei più che grato. Magari la soluzione migliore sarebbe quella di rimanere in attesa dell'invio del net send su una porta (mi pare di aver letto la 135 sia UDP che TCP) e usare il SOCKET ma non so da che parte prenderlo. Grazie a tutti per la pazienza

  2. #2
    Limitati a mettere un Thread.Sleep(1000) nel loop di controllo del registro eventi.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    allora :

    A invia l'avviso, B riceve, A fa il ciclo perchè B risponda scrivendo sul registro di A? (mi sembra molto tortuosa come strada!) oppure è A stesso che scrive sul suo registro?

  4. #4
    Ho già provato la soluzione Thread.Sleep(1000) però dopo un po' si impalla il ciclo e non ne capisco il motivo ....
    Allora mi son dimenticato di dire che su A non posso installare Net Framework 2 ne tantomeno eseguire programmi, quindi ho dovuto ripiegare sul netsend in caso di errore su macchina B. E' tortuoso e ci sto sbattendo la testa da parecchio tempo infatti ...

  5. #5
    Posta il codice.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Domani ti posto il tutto, al momento sono fuori sede grazie per la pazienza

  7. #7
    Purtroppo il timer è una cosa che io la strozzerei...

    E così complicata...

    Gia ho trovato delle difficolta quando lo usata.


    Cerca di definire qualcosa che lo ferma subito

    per esempio...

    ----------
    Dim Intero as Integer

    'Cerca di prevenire che non arrivano più di 1 lettera
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e as System.EventArgs) _ Handles Timer1.Tick
    If (Intero = 1) Then
    ...
    Intero = 2
    End If
    ----------

    prova così

    Puoi anche definirlo in altro modo, invece di utilizzare un valore intero

  8. #8
    Grazie Alexander ma non ci ho capito nulla
    comunque come promesso ecco il codice brutto brutto messo direttamente nel load di un form vuoto

    Dim myLog As New EventLog()
    Dim numerototalelog As Integer = 0

    'dichiaro email server e dati
    Dim mail As New MailMessage()

    'set the addresses
    mail.From = New MailAddress("xxx@xxx.it")
    mail.To.Add("yyy@xxx.it")
    mail.To.Add("zzz@xxx.it")

    'set the content
    mail.Subject = "ERRORE"
    mail.Body = "ERRORE TEST"

    'send the message to server mail
    Dim smtp As New SmtpClient("192.x.x.x")

    Do
    'Dim myLog As New EventLog()
    myLog.Log = "System"
    numerototalelog = (myLog.Entries.Count) - 1
    Dim dataodierna As New Date
    Dim dataodiernaavanti As New Date
    dataodierna = Date.Now()
    dataodiernaavanti = dataodierna.AddSeconds(-2) 'imposto

    If numerototalelog >= 0 Then
    ' se l'ultimo evento nel registro è registrato con la data attuale e l'ora di registrazione dell'evento differisce di almeno 2 secondi indietro rispetto all'ora odierna

    If (myLog.Entries.Item(numerototalelog).TimeGenerated ) >= (dataodiernaavanti) And myLog.Entries.Item(numerototalelog).Source = "Application Popup" Then

    'mando email e scrivo evento sul registro di windows così evito il ciclo.
    myLog.Source = "System"
    myLog.WriteEntry("ERRORE NOTIFICA")

    smtp.Send(mail)
    End If
    End If
    Loop

  9. #9
    uppetto, qualche commento ?

  10. #10
    uppettello

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.