Autore Topic: gb.socket la mia prima esperienza  (Letto 519 volte)

Offline micro

  • Gamberetto
  • *
  • Post: 20
    • Mostra profilo
gb.socket la mia prima esperienza
« il: 04 Marzo 2013, 18:34:25 »
Salve ragazzi
sono probabilmente l'ultimo arrivato (mi sono iscritto da qualche minuto) e sono contento di far parte della Vs. comunità.
Arrivo al dunque, è da appena un giorno che sto smanettando con l'ultima versione di Gambas e Il problema che riscontro è con gb.socket (naturalmente gb.net è abilitato).
Seguono soltanto le Sub della connessione e dell'invio su socket.
Codice: [Seleziona]
Public Sub Open_sock() As Boolean
  sock.Timeout = 5000
  sock.Port = 6000
  sock.Host = "192.168.2.18"
  sock.Connect()
  Do While Net.Searching
    If Net.Connected Then
      connected = True
      Exit
    End If
  Loop
End
'Qui non ho nessun errore e sicuramente la connessione è avvenuta
Public Sub Txsock()
Dim s As String
  s = "$CN2" & Chr(0) 
  datisock = 1  'questo è un mio flag
  Write #sock, s, Len(s) 'Qui ho l'errore: "System Error #32: Pipe interrotta
End

Considerata la Vs. esperienza quale potrebbe essere l'errore?
Naturalmente sock è l'oggetto socket.
Grazie per l'aiuto

Offline micro

  • Gamberetto
  • *
  • Post: 20
    • Mostra profilo
Re: gb.socket la mia prima esperienza
« Risposta #1 il: 04 Marzo 2013, 18:40:43 »
 ??? Ho appena notato che con qualsiasi IP (device non presenti in rete) la connessione avviene comunque.
Come mai?
Forse mi sfugge qualcosa sul corretto utilizzo di gb.socket

Offline micro

  • Gamberetto
  • *
  • Post: 20
    • Mostra profilo
Re: gb.socket la mia prima esperienza
« Risposta #2 il: 04 Marzo 2013, 21:27:08 »
Ho modificato la Sub relativa alla connessione e lettura dati, adesso funziona bene:
Codice: [Seleziona]
Public Sub open_sock() As Boolean
  sock = New Socket
  sock.Timeout = 5000
  'sock.Port = Val(FormSetting.portatxt.Text)
  'sock.Host = FormSetting.ipservertxt.Text
  sock.Connect(FormSetting.ipservertxt.Text, Val(FormSetting.portatxt.Text))
  Do While (sock.Status <> 7) And (sock.Status > 0)
    Wait 0.1
  Loop
  connected = True
  Catch
    Message.Error(Error.Text)
    connected = False
End

Public Sub txrxsock()
Dim s As String
  s = "$CN2" & Chr(0)
  datisock = 1  'flag
  Write #sock, s, Len(s)
  Do While Lof(sock) = 0
    Wait 0.1
  Loop   
  Read #sock, s, Lof(sock)
End

Adesso si connette corretamente e scrive e legge su socket.
Unica cosa adesso è perchè gli eventi non vengono innescati?
Per catturare in automatico i dati in arrivo considerando che il mio oggetto socket è chiamato sock devo mettere:
Public Sub sock_Read()
Mentre per gli Errori:
Public Sub sock_Error()
Però non vengono mai attivate, perchè?
Grazie per i suggerimenti.

Offline micro

  • Gamberetto
  • *
  • Post: 20
    • Mostra profilo
Re: gb.socket la mia prima esperienza
« Risposta #3 il: 05 Marzo 2013, 06:17:57 »
Per i più esperti un aiuto sull'innesco degli eventi su socket .....
Senza pretese naturalmente.
Grazie

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: gb.socket la mia prima esperienza
« Risposta #4 il: 05 Marzo 2013, 06:25:22 »
Se istanziato da codice:

Private sock as socket

Pubic sub _new

  sock = new Socket As "MioSocket"

End

Publick sub MioSocket_Read()


End


Se inserito graficamente dall'ide di gambas MioSocket lo sostituisci con il nome assegnato da gambas al socket (Es. Socket1)

Offline micro

  • Gamberetto
  • *
  • Post: 20
    • Mostra profilo
Re: gb.socket la mia prima esperienza
« Risposta #5 il: 05 Marzo 2013, 13:25:42 »
Grazie per le info  :ok:
appena posso faccio le dovute prove.