Over een socket ontvang ik berichten (commandos) van een client. Deze berichten worden afgehandeld door de server en de server stuurt naar de client weer een bericht terug. Zo onstaat er communicatie zoals dat bijvoorbeeld gebeurd bij het SMTP protocol.
In de code hieronder zie je dat de server een bericht stuurt via de streamwriter
naar de client waarin staat "100 SERVER ..etc.. ". Dit is voordat loop gestart wordt waarin de berichten die van de client komen, geevalueerd worden door een aparte functie die een string retourneerd. Alle berichten die ik voor de loop laat sturen komen bij de cient (op dit moment een VB6 test app) aan, alle berichten die in de loop gestuurd worden, lijken niet verstuurd te worden.
Ook de Consolse.Writeline()'s in de loop worden pas getoond zodra de client disconnect en de server dus uit de loop gaat. Wat doe ik verkeerd?
Overigens heb ik een hoop overbodige zut uit de code gehaald.
In de code hieronder zie je dat de server een bericht stuurt via de streamwriter
naar de client waarin staat "100 SERVER ..etc.. ". Dit is voordat loop gestart wordt waarin de berichten die van de client komen, geevalueerd worden door een aparte functie die een string retourneerd. Alle berichten die ik voor de loop laat sturen komen bij de cient (op dit moment een VB6 test app) aan, alle berichten die in de loop gestuurd worden, lijken niet verstuurd te worden.
Ook de Consolse.Writeline()'s in de loop worden pas getoond zodra de client disconnect en de server dus uit de loop gaat. Wat doe ik verkeerd?
Overigens heb ik een hoop overbodige zut uit de code gehaald.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
| public class Processor
{
private Socket _socket;
private bool _quitRequested = false;
private StreamWriter _outputStream;
private int ProcessorStatus;
private UserAccount _Account;
/// <summary>
/// Initializes object for given socket.
/// </summary>
/// <param name="socket">Socket with established connection</param>
public SMTPProcessor(Socket socket, string MailFolder)
{
_socket = socket;
ProcessorStatus = 0;
}
/// <summary>Starts communication with client.</summary>
public void Process()
{
string clientMessage = string.Empty;
string serverMessage = string.Empty;
NetworkStream networkStream = new NetworkStream(_socket);
StreamReader streamReader = new StreamReader(networkStream);
StreamWriter streamWriter = new StreamWriter(networkStream);
try
{
// All writes will be done immediately and not cached:
streamWriter.AutoFlush = true;
// Send welcome message first:
string welcome = "100 SERVER " +
System.Environment.MachineName + " READY AT " +
DateTime.Now.ToString() + ". PLEASE SEND LOGIN.";
streamWriter.WriteLine(welcome);
//status of processor is waiting for logon data
ProcessorStatus = 1;
// Start loop and handle commands:
while (!_quitRequested)
{
clientMessage = streamReader.ReadLine();
serverMessage = EvaluateCommand(clientMessage);
if (clientMessage != "") {
Console.WriteLine("clientMessage: " +
clientMessage);
}
if (serverMessage != "") {
Console.WriteLine("serverMessage: " +
serverMessage);
streamWriter.WriteLine(serverMessage);
}
}
}
catch (Exception ex)
{
Logfile log = new Logfile();
log.AddEvent("An Exception occured: " + ex.ToString());
log.Close();
}
finally
{
streamWriter.Close();
streamReader.Close();
networkStream.Close();
_socket.Close();
_outputStream.Close();
Logfile log = new Logfile();
log.AddEvent("Server closed connection");
log.Close();
}
}
} |
[ Voor 4% gewijzigd door Verwijderd op 15-12-2004 10:25 ]