Hi!!

This is probably not mono-devel related but I'd really appreciate it, if
somebody could help.

I am writing a client application (w/ mono and C#) that communicates
with the server via message-strings. These strings are terminated by the
usual '\n'. The '\n' may be followed by additional data, which is why
the string has to be processed before reading the rest.

I am currently getting one character at a time, checking the
socket-state with Socket.Select. Yes, using a buffer would be nice, but
the server-protocol forces me to do it this way. ;-)

Somehow Select (and Poll, which I have also tried) does not seem to work
correctly. Sometimes I get correct results, mostly nothing is read
though. When using a buffer, everything works rather fine. When using -1
as timeout value, everything works fine but blocks after the last char.

This is my code:
++++++++++++++++++++++++ Select

ArrayList listenList = new ArrayList();
listenList.Add(socket);

int count = 0;
bool read = true;

while (read)
{
        read = false;
        Socket.Select(listenList, null, null, 5000);
                                
        if (listenList.Contains(socket))
        {                                       
                read = true;
                count = socket.Receive(buffer, 1, SocketFlags.None);

                Console.WriteLine("count: " + count);

                message += (char)buffer[0];
                                
                if ((char)buffer[0] == '\n')
                        return message;
        }
}

++++++++++++++++++++++++ Poll

while (socket.Poll(-1, SelectMode.SelectRead))
{
        count = socket.Receive(buffer, 1, SocketFlags.None);

        message += (char)buffer[0];
                                
        if ((char)buffer[0] == '\n')
                return message; 
}

++++++++++++++++++++++++

Thanks for reading!
Dennis


_______________________________________________
Mono-list maillist  -  [EMAIL PROTECTED]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to