Oppure

Loading
13/11/09 15:01
Il Totem
Ma tu stai richiamando Start tante volte quante i tick del timer, ossia ogni decimo di secondo gli dici di iniziare a mettersi in ascolto: è inutile e assurdo, basta una sola volta.
E poi perchè inizializzi il tcpclient? Non ti serve inizializzarlo, perchè l'unico modo che hai di riceverne un'istanza valida è attraverso listener.AcceptTcpClient.

Dato che hai una certa ossessione per i costruttori, è sempre meglio NON inizializzare una variabile di tipo reference, ma solo dichiararla. La si inizializza poco prima dell'uso, e la si distrugge appena terminato di usarla.
aaa
13/11/09 16:08
carant
@Gianluca87:Sono qui proprio perchè non lo so fare, se me lo volete dire va bene se no niente...
Poi per Il Totem: quindi cosa devo modificare?? devo mettere timer1.stop?? scrivi il codice...
Grazie della risposta. Ciao!!!:)
aaa
13/11/09 19:48
Gianluca87
Postato originariamente da carant:

@Gianluca87:Sono qui proprio perchè non lo so fare, se me lo volete dire va bene se no niente...
Poi per Il Totem: quindi cosa devo modificare?? devo mettere timer1.stop?? scrivi il codice...
Grazie della risposta. Ciao!!!:)

non ho la più pallida idea di quanti dati tu debba gestire mi sembra ad ogni modo sbagliato usare un timer per una cosa del genere...
prova a guardare qusto link ci sono anche i sorgenti
codeproject.com/KB/IP/…
aaa
14/11/09 14:06
Il Totem
Postato originariamente da Gianluca87:

non ho la più pallida idea di quanti dati tu debba gestire mi sembra ad ogni modo sbagliato usare un timer per una cosa del genere...
prova a guardare qusto link ci sono anche i sorgenti
codeproject.com/KB/IP/…


while (true)
{
Console.WriteLine("CLIENT: "+serverStreamReader.ReadLine()); 
serverStreamWriter.WriteLine("Hi!"); 
serverStreamWriter.Flush();
}

Ah certo, perchè un while(true) che blocca tutta l'applicazione è meglio, vero? Non hai neanche notato che il client non riesce neppure a ricevere dati dal server, proprio perchè manca il timer.
Può anche essere non particolarmente elegante usare un timer, ma non è sbagliato (anche perchè TcpClient e TcpListener non espongono alcun evento, e sarebbe impossibile fare altrimenti). Può anche "sembrarti" sbagliato, ma rimane sempre un'impressione finché non proponi una soluzione più efficiente. E' logica, si tratta di dati concreti.


@carant: come cosa devi modificare? L'ho detto prima: devi tirare Start fuori dal codice gestito nel timer, o verrà richiamato decine e centinaia di volta. Prova a metterlo in FormLoad o FormShown se più di aggrada.
aaa
14/11/09 18:46
Gianluca87
Postato originariamente da Il Totem:

Postato originariamente da Gianluca87:

non ho la più pallida idea di quanti dati tu debba gestire mi sembra ad ogni modo sbagliato usare un timer per una cosa del genere...
prova a guardare qusto link ci sono anche i sorgenti
codeproject.com/KB/IP/…


while (true)
{
Console.WriteLine("CLIENT: "+serverStreamReader.ReadLine()); 
serverStreamWriter.WriteLine("Hi!"); 
serverStreamWriter.Flush();
}

Ah certo, perchè un while(true) che blocca tutta l'applicazione è meglio, vero? Non hai neanche notato che il client non riesce neppure a ricevere dati dal server, proprio perchè manca il timer.
Può anche essere non particolarmente elegante usare un timer, ma non è sbagliato (anche perchè TcpClient e TcpListener non espongono alcun evento, e sarebbe impossibile fare altrimenti). Può anche "sembrarti" sbagliato, ma rimane sempre un'impressione finché non proponi una soluzione più efficiente. E' logica, si tratta di dati concreti.


@carant: come cosa devi modificare? L'ho detto prima: devi tirare Start fuori dal codice gestito nel timer, o verrà richiamato decine e centinaia di volta. Prova a metterlo in FormLoad o FormShown se più di aggrada.

ci sono milioni di esempi già fatti probabilmente ho preso l'esempio sbagliato...
ma sicuramente la tecnica giusta non è un timer... concettualmente sbagliato...
per affrontare in maniera pulita questo problema secondo me bisognerebbe saper utilizzare i Thread e i Socket, gli eventi mancati su TcpListener e TCPClient li implementi.
appena ho un momento butto giù 2 righe di codice di esempio.
aaa
14/11/09 20:02
carant
Il timer va bene, perchè se io lo faccio solo scrivere da una parte non si blocca...
Quando va a leggere è il problema: quando dico Read vuole buffer che è byte, offset che è 0,
la lunghezza del buffer che è Byte(il buffer intendo) e che non posso capire, perchè Length non è un membro di byte...
quello che bloccava era dim c(client.receivebuffersize) as byte perchè receivebuffersize restituisce integer infatti se scrivo
dim c as byte
c=client.receivebuffersize l'errore me lo da.
FORSE è così, non lo so.... Provo a spostare start e vedo...
se vi viene un'illuminazione mi dite.:) Ciao.
Ultima modifica effettuata da carant 14/11/09 20:06
aaa
15/11/09 3:30
Gianluca87
Postato originariamente da carant:

Il timer va bene, perchè se io lo faccio solo scrivere da una parte non si blocca...

ma cosa centra?
scusa... allora mettiamo caso che il tick del timer lo imposti a 1 millisecondo..
se il secondo tick scatta prima che tu abbia finito le operazioni sul primo cosa succede?
te lo dico io? si pianta tutto...i tick del timer sono degli eventi...come tali vengono scatenati sul tick del timer...quindi....rischi di accavallare le operazioni sul socket
chiaramente... se invii come dati sempre la stringa "Ciao" da solamente un client sulla stessa macchina della applicaizione server... il problema non lo vedi...
tienine conto...
aaa
15/11/09 14:49
carant
Quindi metto timer1.stop() dopo aver scritto... così va bene??
comunque si bloccava con il pulsante per leggere non con il timer. comunque provo a fare come dici tu.
aaa