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
Visual Basic 6 - VB6 winsock.........AIUTO!!!!
Forum - Visual Basic 6 - VB6 winsock.........AIUTO!!!!

Avatar
luca94 (Normal User)
Pro


Messaggi: 71
Iscritto: 07/05/2008

Segnala al moderatore
Postato alle 12:38
Venerdì, 11/07/2008
Ciao a tutti,
ho appena iniziato a programmare con winsock in visual basic 6.0 e ho un problemino: ho creato due progetti in vb, un client e un server nei quali ho inserito un winsock ciascuno. Le proprietà del winsock del client e del server sono uguali e lo impostate così:
LocalPort : 666
RemotePort : 666
Nel client ho associato un TextBox al RemoteHost (nella quale inserire l' IP) con l' apposito tasto connetti.
Vorrei comandare al server (attraverso il client) di darmi un MsgBox con scritto "Ciao". Ma se inserisco il mio IP nella textbox (nel client), apro il server, e nel client premo connetti mi dice "adress in use". Come mai??
Ecco il codice del client:
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Command1_Click()
  2. Winsock1.RemoteHost = Text1.Text
  3. Winsock1.Connect
  4. End Sub
  5.  
  6. Private Sub Command3_Click()
  7. Winsock1.SendData "messaggio"
  8. End Sub



Ecco il codice del server:
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Form_Load()
  2. Winsock1.Listen
  3. End Sub
  4.  
  5. Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
  6. If Winsock1.State <> sckClosed Then Winsock1.Close
  7. Winsock1.Accept requestID
  8. End Sub
  9.  
  10. Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  11. Dim dati As String
  12. Winsock1.GetData dati
  13.  
  14. Select Case dati
  15. Case "messaggio"
  16. MsgBox "Ciao utente!!!"
  17. End Select
  18. End Sub
  19.  
  20. Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
  21. Winsock1.Close
  22. Winsock1.Listen
  23. End Sub


Ultima modifica effettuata da Shutdown il 11/07/2008 alle 18:48
PM Quote
Avatar
antometal (Member)
Guru


Messaggi: 691
Iscritto: 12/09/2007

Segnala al moderatore
Postato alle 13:11
Venerdì, 11/07/2008
se il client e il server giano sullo stesso pc come ip devi mettere 127.0.0.1 oppure localhost che identifica se stesso, altrimenti devi usare 2 pc con indirizzi di rete diversi

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 14:01
Venerdì, 11/07/2008
Prima di tutto, NON impostare la porta del client, ma lasciala a zero. In questo modo la scegliera' il sistema e non avrai conflitto con la porta del server.

Le porte NON devono essere eguali per comunicare, in generale, e in particolare sullo stesso sistema.

Noto che ci sono moltissimi messaggi su winsock e programmazione in rete ma noto anche che NESSUNO ha mai studiato un po' di "teoria" sulla rete (protocolli, socket, TCP ...) ma TUTTI vogliono subito scrivere client e server funzionanti ...

PM Quote
Avatar
giusy_m86 (Normal User)
Pro


Messaggi: 143
Iscritto: 09/07/2008

Segnala al moderatore
Postato alle 14:53
Venerdì, 11/07/2008
ti posto la mia applicazione

Client
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Form_Load()
  2. 'INIZIALIZZA IL SOCKET E RICHIEDE LA CONNESSIONE
  3. Winsock1.Protocol = sckTCPProtocol
  4. Winsock1.RemoteHost = "192.168.1.55"
  5. Winsock1.RemotePort = 141
  6. End Sub
  7.  
  8. Private Sub cmdConnetti_Click()
  9. 'RICHIEDE LA CONNESSIONE
  10. Winsock1.Connect
  11. cmdInvia.Enabled = True
  12. End Sub
  13.  
  14. Private Sub Winsock1_Connected()
  15. 'CONNESSIONE COMPLETATA ORA E' POSSIBILE SCAMBIARE I DATI
  16. cmdInvia.Enabled = True
  17. End Sub
  18.  
  19. Private Sub cmdInvia_Click()
  20.  'INVIA I DATI (ORA ATTUALE) SULLA SOCKET E CHIUDE LA CONNESSIONE
  21. If Winsock1.State = sckConnected Then
  22. Winsock1.SendData Format(Now)
  23. End If
  24. End Sub
  25.  
  26. Private Sub cmdChiudi_Click()
  27. 'CHIUDE LA CONNESSIONE
  28. Winsock1.Close
  29. End Sub




SERVER
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Form_Load()
  2. 'INIZIALIZZA LA SOCKET E SI METTE IN ASCOLTO
  3. Winsock1.Protocol = sckTCPProtocol
  4. Winsock1.LocalPort = 141
  5. Winsock1.Listen
  6. End Sub
  7.  
  8. Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
  9. 'VERIFICA SE POSSIBILE ACCETTARE LA CONNESSIONE
  10. If Winsock1.State <> sckClosed Then Winsock1.Close
  11. 'ACCETTA LA NUOVA CONNESSIONE
  12. Winsock1.Accept requestID
  13. End Sub
  14.  
  15. Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  16. 'LEGGE I DATI IN ARRIVO E LI VISUALIZZA
  17. Dim Msg As String
  18. Winsock1.GetData Msg
  19. Me.Print Msg & "from " & Winsock1.RemoteHostIP
  20. End Sub
  21.  
  22. Private Sub Winsock1_Close()
  23. 'CHIUDE LA CONNESSIONE E SI RIMETTE IN ASCOLTO
  24. Winsock1.Close
  25. Winsock1.Listen
  26. End Sub




SPERO CHE TI SIA DI AIUTO CIAO

-------------
Occhio al CAPS LOCK!!!

Ultima modifica effettuata da Shutdown il 11/07/2008 alle 18:52
PM Quote
Avatar
luca94 (Normal User)
Pro


Messaggi: 71
Iscritto: 07/05/2008

Segnala al moderatore
Postato alle 15:13
Venerdì, 11/07/2008
Ho risolto tutto!! Grazie!!

PM Quote
Avatar
Shutdown (Founder Member)
Guru


Messaggi: 1212
Iscritto: 10/09/2005

Segnala al moderatore
Postato alle 18:53
Venerdì, 11/07/2008
Come hai risolto?

PM Quote
Avatar
luca94 (Normal User)
Pro


Messaggi: 71
Iscritto: 07/05/2008

Segnala al moderatore
Postato alle 8:50
Sabato, 12/07/2008
Inserivo le porte (LocalPort e RemotePort) anche al client.

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 23:07
Sabato, 12/07/2008
Testo quotato

Postato originariamente da luca94:

Inserivo le porte (LocalPort e RemotePort) anche al client.



Te lo avevo detto ... :)

PM Quote