Хороший способ интерпретации ответов сокетов - PullRequest
1 голос
/ 12 октября 2011

Я пытаюсь написать простой почтовый клиент на Java с сокетами.Но я думаю, что это лучший способ обработать ответ от сервера?Предположим, у меня есть простой код, подобный приведенному ниже:

smtpSock = new Socket(mailHost, SMTP_PORT);
inn = smtpSock.getInputStream();
outt = smtpSock.getOutputStream();
in = new BufferedReader(new InputStreamReader(inn));
out = new PrintWriter(new OutputStreamWriter(outt), true);

out.println("AUTH LOGIN " + user.getID());
String response = in.readLine();
//manipulate the response string to check if user ID exists on server
//if ID exists, proceed to password. Else, quit.

out.println("PASS " + user.getPassword());
response = in.readLine();
//manipulate the response string to check if auth success or not

После того, как я выполнил команду AUTH LOGIN и в качестве параметра указал идентификатор пользователя, сервер, скорее всего, даст ответ.Я могу получить ответ на строку.Теперь, чтобы понять ответ и знать, что делать дальше, я думаю, что я бы манипулировал строкой путем ее токенизации, а затем читал первые 3 символа один за другим, чтобы интерпретировать номер кода ответа.Это может звучать нормально, поскольку код ответа составляет всего 3 символа.

Но что произойдет, если, скажем, сокет теперь подключается к POP3 и получает почту.Ответ будет довольно огромным.Есть ли хороший и не слишком сложный способ интерпретировать ответ и затем поместить его в структуру данных?Если синтаксический анализ строки - единственный способ, не слишком ли наивна моя идея маркировать огромный набор данных String в соответствии с их «текстовыми шаблонами»?Есть ли более эффективный и быстрый способ сделать это?

1 Ответ

1 голос
/ 14 октября 2011

POP3 очень отличается от SMTP, среди прочего он использует другой синтаксис ответа. SMTP имеет трехбуквенные коды, да, но я бы добавил, что после простого кода могут быть также расширенные коды состояния. POP3 не имеет кодов ошибок, только общее отрицательное сообщение. Вы можете разобрать построчно оба из них. POP3 не предшествует каждой строке сообщения с кодом состояния, конечно. Если сообщение очень большое, вы должны записать его в файл, пока вы его читаете. Я рекомендую вам взглянуть на исходные почтовые серверы Java, Mireka http://code.google.com/p/mireka/ и Apache James http://james.apache.org/

...