Newsgroup: it.comp.lang.visual-basic
Titolo: WinSock

Salve, sono nuovo e sto realizzando un programma Client/Server con le
socket.
Il programma server si mette in attesa e accetta la richiesta di
connessione, il client manda tranquillamente messaggi al server tramite il
comando Winsock1.SendData DatoDaInviare. Il mio problema e che il server non
può inviare nello stesso modo le informazioni in quanto resta in attesa di
ulteriori connessioni e quindi non si trova nello stato giusto per quel
comando. Ed ora la domanda, come faccio dal server a mandare messaggi al
client?
Grazie soprattutto per la pazienza!
BYE

 client?
Nello stesso modo con cui dal client mandi al server, semplice :) Una 
volta che i due pc sono connessi tra loro, puoi utilizzare 
indistintamente su entrambi (client o server che sia) il metodo 
senddata per inviare e dataarrival per ricever. Dopo che ho letto il 
tuo post ho fatto una prova e ho visto che funziona. Ho porvato a 
mandare un messaggio di testo dal client al server e dal server al 
client. Se hai problemi fammelo sapere che ti invio quello che ho 
provato io.
Saluti...
-- 
Posted from 212.29.130.175 by way of 
smtp3.libero.it
 [193.70.192.53] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

provato io.
Credo che lui intendesse dire: anche dopo la connessione il server deve rimanere in attesa di altre
connessioni. Se è così, la soluzione è quella di usare un array di controlli Winsock e fare
accettare ogni singola connessione ad una nuova istanza.
Ciao,
Moreno
#sirri#@#morenosoft#.com
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.morenosoft.com/MSVBSite/
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
---------------------------------------------------------------------------

 ha scritto nel messaggio
news:G6WMX8$IzjowWGK_VT66nIYg1Wcwj...@libero.it...>


ma poi? come hai fatto a uscire da questo stato?
Ti posto il codice, non č il massimo della chiarezza, erano solo delle
prove, perň dovrebbe rendere il concetto.
Questo qui č il codice della parte che io ho chiamato server, quindi
ascolta agganciando chi chiama, e in piů manda un messaggio al
chiamante. Se ancora hai dei dubbi, ti invio via mail uno zip con
entrambi i due progettini, quello client e quello server, cosě vedi
come funzionano insieme.
Saluti...
Option Explicit
Private Sub Command1_Click()
' questa č proprio la parte che interessa a te; come vedi, controllo 
' se i due sono connessi, e poi uso il comando SendData, passando un
' testo di prova, che vedo apparire nel form di quello che consodero
' client. Come nella parte server c' č un  "Private Sub
' xxx_DataArrival...." devi metterne uno anche nella parte client,
' altrimenti questo non č in grado di accettare quello che tu gli
' mandi.
    If winskServer.State <> sckConnected Then Exit Sub
 
    winskServer.SendData "dal server"
End Sub
Private Sub Form_Load()
' all' avvio del programma, metto il server in ascolto, e fin qui ci
' siamo...
    winskServer.Listen
End Sub
......
.........
.......
Private Sub winskServer_ConnectionRequest(ByVal requestID As Long)
    winskServer.Close
' Accetta la chiamata da parte del client e stabilisco la connessione
    winskServer.Accept requestID
End Sub
Private Sub winskServer_DataArrival(ByVal bytesTotal As Long)
    Dim ComandoClient As String
 
' qui dentro legge il comando (in questo caso un testo) che gli invia
' il client, e poi lo visualizzo in una label piazzata nel form,
' (qui č ancora il server a ricevere qualcosa)
    winskServer.GetData ComandoClient, vbString, bytesTotal
    Label2.Caption = "Comando:"
    Label2.Caption = Label2.Caption & " " & ComandoClient
End Sub

 connessioni. Se č cosě, la soluzione č quella di usare un array di


potrebbe ovviare?
Giustissimo!! E' vero!! Come si potrebbe ovviare?
Il server, puň essere pensato in modo tale da mandare ogni tot di
secondi un colpetto a quelli che sono collegati e vedere se questi
sono ancora vivi? Per quelli che non rispondono salti l' array...ti
crei una sorta di tabellina e poi vedi quali hanno risposto al colpo
in modo da parlarci ancora. Non esiste un qualcosa del winsok, una
sorta di ping, che fa lui automaticamente verso i client collegati?
Cosě č semplice capire chi c'č e chi no...
Saluti...

 wrote in message
news:3a5c367c...@news.enter.it...


Giustissimo!! E' vero!! Come si potrebbe ovviare?
Quando il client si vuole disconnettere, invia al server una stringa del tipo "Disconnecting...": il
server capisce al volo e chiude la connessione...
Se invece la disconnessione avviene in modo accidentale (crash di winzozz) allora il problema si
ripone, ma, se non ricordo male, se il pacchetto non può esser inviato al destinatario, viene
generato un errore (che puoi gestire: Evento error,  l'errore il questione dovrebbe essere "Host not
found")


found")
Ma la cosa che dicevo io, tenere un controllo
client/server per palleggiarsi qualcosa tra i due e vedere quando non c'è
più risposta, non si può fare??
Saluti...
--------------------------------
Inviato via 
http://usenet.iol.it
 

più risposta, non si può fare??
Cosa vuoi palleggiare? Ah, intendi un ping? Sì, ma non so quanto avrebbe senso: se tu invii ogni tot
(con un timer) un pacchetto di dati (che il client non stampa ma elabora, più o meno come il comando
di prima) e tale pacchetto non giunge a destinazione, viene generato l'errore "Host not found", ma
tale errore viene generato anche quando tu cerchi di inviare una stringa qualsiasi, quindi...
Se tu presti attenzione a IRC o ai vari programmi di chat, vedrai che scopri che l'utente con cui
chattavi si è sconnesso solo quando cerchi di inviargli un messaggio, non prima, a meno che, i
programmi un po' più furbi, non notifichino la disconnessione su rchiesta dell'utente, come appunto
ti ho spiegato prima (#SKUNK#....)


Ma qui entriamo in un discorso di gestione delle risorse...
Ossia? Entriamo entriamo, che mi interessa...

 Ossia? Entriamo entriamo, che mi interessa...
Per dirne una, non puoi avere infiniti socket, percui devi stare attento a
rimuovere quelli inutilizzati per piu' di un certo tempo e a dare priorita'
nell'assegnazione di nuove Accept a socket gia' esistenti ma disconnessi,
dato che creare un socket richiede tempo.
Ciaotutti,
Alessandro

 dato che creare un socket richiede tempo.
questo e' quello che ti dicevo io Skunk
se usassi un sistema operativo serio non avresti questi enormi problemi
purtroppo winzozz 9x dopo il 15° socket va a farsi friggere
bye
--
Fibia "Sakamoto" FBI
URL: 
www.geocities.com/fibiafbi
E-Mail: 
fibi...@hotmail.com
ICQ UIN 63586057
Membro #25 delle Brigate Takahashi Sez. Sud