Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Poblema socket
sabato 18 novembre 2006 - 22.47
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
bitabit
Profilo
| Newbie
8
messaggi | Data Invio:
sab 18 nov 2006 - 22:47
ho uno strano problema sulla comunicazione con un server per l'invio di un messaggio di posta - l'errore non genera alcuna eccezione e si manifesta con il blocco del programma (va in palla).
l'errore è di questo tipo:
connessione al server sulla porta 25 - ok
invio della prima stringa - ok
lettura della prima risposta del server - ok
invio della seconda stringa - ok
lettura della seconda risposta del server - errore - qui il programma si blocca e va in palla..
posso postare il codice o qualcuno sa gia dirmi di cosa si tratta?
grazie
Slayer
Profilo
| Newbie
20
messaggi | Data Invio:
dom 19 nov 2006 - 12:19
Si posta almeno l' istruzionre che possa contenere l' errore.
bitabit
Profilo
| Newbie
8
messaggi | Data Invio:
dom 19 nov 2006 - 12:37
si, ma prima devo fare due precisazioni relative ad alcune cose che ho scoperto stanotte:
1) in realtà l'unico momento in cui il server mi risponde è quando mi connetto ad esso:
myclient.connect(...) - > il server mi risponde e verifico la risposta (testato)
da qui in poi, le stringhe che invio non sono sicuro nemmeno che arrivino a destinazione, perche il server non risponde piu e in realtà ho scoperto che non va in palla il programma, ma semplicemente resta in attesa di risposta dal server e questa cosa l'ho scoperta con data avaible e cioè: if(dataavaible) se ci sono dati disponibili da leggere..fai qualcosa..e lui non fa niente..
sulla guida msdn ho letto che se non ci sono dati disponibili il progr resta in attesa!
questo è il codice modificato che mi ha portato a queste scoperte:
//inizio sessione socket
TcpClient myclient = new TcpClient();
string strtowrite = "";
string strtoread = "";
byte[] rispostaserver = new byte[100]; //la risposta del server non supererà mai i 100byte
byte[] scrivialserver;
ASCIIEncoding codifica = new ASCIIEncoding();
string verifica = ""; //per trovare le sottostringhe nelle risposte del server
myclient.Connect("193.70.192.50", 25);//connessione al client
NetworkStream streamonsocket = myclient.GetStream();//apertura dello stream sulla socket..ok qui il server mi risponde, ho omesso il codice che conferma quanto dico
//////////////////////////////////////////////////////
strtowrite = "helo libero.it";//stringa da inviare
scrivialserver = codifica.GetBytes(strtowrite);//stringa convertita in byte
streamonsocket.Write(scrivialserver, 0, scrivialserver.Length);//byteinviati
/*con la seguente istruzione dimostro
* che il server non risponde neanche su helo libero.it,
*/
if (streamonsocket.DataAvailable)//se ci sono risposte dal server...
{
label1.Text = "sto per leggere";
streamonsocket.Read(rispostaserver, 0, 100);//ora rispostaserver contiene la risposta in byte
strtoread = codifica.GetString(rispostaserver);//risposta server convertita in stringa
}
//fine spezzone di codice
bene, l'istruzione if (streamonsocket.DataAvailable) non è mai vera, ecco perche non riesco a leggere le risposte del server, perche non ce ne sono!
ma la domanda è: perche? le stringhe che invio col metodo write non arrivano a destinazione? devo simulare l'invio del tasto "invio"?
dove sbaglio?
bitabit
Profilo
| Newbie
8
messaggi | Data Invio:
dom 19 nov 2006 - 14:15
ok, forse ci sono:
su una guida sul pop3 in questo sito (codice in vb.net) ho notato che ad ogni dinvio di una stringa opportunamente codifcata in ascii c'è sempre: stringadainviare + vbCrLf..
allotra ecco forse il mio problema: non ricevo risposte dal server semplicemente perchè..lui non riceve "del tutto" la mia richiesta...è come se io aprissi una sessione telnet, scrivessi cose tipo helo libero.it ma senza premere invio..è ovvio che lui ono mi risponde:
e allora ho bisogno di aiuto perchè non sapre come fare a simulare l'invio con c#...
qualcuno puo farmi un esempio di codice?
strtowrite = "helo libero.it";//stringa da inviare
scrivialserver = codifica.GetBytes(strtowrite);//stringa convertita in byte
streamonsocket.Write(scrivialserver, 0, scrivialserver.Length)
//dove lo piazzo il tasto invio? e come?
grazie
Slayer
Profilo
| Newbie
20
messaggi | Data Invio:
dom 19 nov 2006 - 15:43
Del C# conosco poco, o quasi niente, pero posso dirti che vbCrLf è una costante carattere 'a capo', quindi in vb net è come se gli dassi l' invio. In C# non saprei vbCrLf come puo essere sostituito.
bitabit
Profilo
| Newbie
8
messaggi | Data Invio:
dom 19 nov 2006 - 16:26
si serve per dare invio e in c# che io sappia si fa in 2 modi;
\n\r
enviromento.newline
in entrambi i casi non ho risolto il mio problema
aiuto..
bitabit
Profilo
| Newbie
8
messaggi | Data Invio:
lun 20 nov 2006 - 00:53
trovato l'errore:
devo leggere con read() tutte le risposte, anche quelle che apparentemente non mi servono controllare
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !