Считать из сети проблему .NET - PullRequest
0 голосов
/ 11 декабря 2010

Я пытаюсь разработать простой SMTP-сервер, проблема заключается в том, что, когда я пытаюсь прочитать сообщение из сети, все сообщения представляют собой строку с большим количеством "/ 0" вместо введенной команды.Я использую telnet для подключения к своему приложению и для ввода сообщений.

это мой код:

public void StartListen()
        {
            SMTPParser parser = new SMTPParser();
            SMTPResponder responder = new SMTPResponder();
            Listening = true;

            IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 25);
            TcpListener listener = new TcpListener(endPoint);
            listener.Start();


            while(Listening)
            {               
                byte[] data = new byte[2048];               
                Socket socket = listener.AcceptSocket();                
                socket.Receive(data);

                string cmd = Encoding.ASCII.GetString(data);

                if(cmd !="") parser.Parse(cmd, responder);
            }
        }

1 Ответ

1 голос
/ 11 декабря 2010

Socket.Receive возвращает количество прочитанных байтов. В настоящее время вы всегда получаете строку из 2048 байтов буфера, даже если считано только несколько байтов. Изменить на:

int length = socket.Receive(data);
string cmd = Encoding.ASCII.GetString(data, 0, length);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...