PDA

View Full Version : [C] Lato server non invia messaggio sul mailslot


Alhazred
23-07-2007, 07:53
Sto scrivendo un programma che dovrebbe simulare la posta elettronica in locale su un pc. Sono all'inizio e per ora sto cercando di far comunicare client e server e fargli fare le operazioni base.
Per la scrittura di una nuova mail non ho problemi, il client invia il messaggio su mailslot al server e questo lo salva in un file.
Sto invece avendo problemi con la lettura delle mail. Il client inoltra la richiesta di lettura, il server la riceve correttamente, legge poi correttamente il file contenente la mail e la salva in un messaggio da inviare tramite mailslot al client, il problema nasce qui, ho sempre un errore di invio tramite mailslot.
Mettendo stampe su console per vedere cosa funziona e cosa no è saltato fuori che la WriteFile della funzione LeggiDaFile del processo server non scrive nulla nel mailslot, la variabile numWritten che dovrebbe contenere il numero di bytes scritti vale sempre 0.

- Codice Server (http://www.lacasa.altervista.org/software/Server.c)
- Codice Client (http://www.lacasa.altervista.org/software/Client.c)

Perché funzioni deve esserci un file "input.txt" nella stessa cartella da dove viene fatto partire il processo server con 4 righe che contengono rispettivamente mittente, destinatario, oggetto, testo, quindi una cosa del tipo:
Pippo
Topolino
oggetto della mail
testo di prova

Riuscite a capire dov'è il problema?

P.S. per vedere/scaricare i codici è necessario il copia-incolla dell'indirizzo sul browser.

Alhazred
25-07-2007, 14:55
Nessuno riesce a capire quale possa essere il problema?

sottovento
26-07-2007, 06:43
Prova a dare un'occhiata a
http://www.codeproject.com/internet/mailslots.asp.

C'e' anche un esempio che puoi scaricare e far girare.

Comunque la WriteFile() ritorna un valore di tipo booleano e non il numero di byte letti, il quale e' ritornato in un parametro di uscita (non ricordo quale, sorry).
Pertanto dovrai fare anche una piccola modifica per testare correttamente il valore di ritorno.

Alhazred
26-07-2007, 16:47
Lo so cosa ritorna la WriteFile infatti l'ho messa dentro un if come condizione, il numero di bytes scritti lo ottengo leggendo il valore numWritten dopo aver eseguito la WriteFile e vale 0 invece di valere 404 (come nelle altre chiamate dove la uso), ovvero la dimensione del tipo di dato che uso per i messaggi.

Comunque ora darò un'occhiata al link che mi hai segnalato.
Grazie :)