Java程序辅导

C C++ Java Python Processing编程在线培训 程序编写 软件开发 视频讲解

客服在线QQ:2653320439 微信:ittutor Email:itutor@qq.com
wx: cjtutor
QQ: 2653320439
Csc344- Computer Networks 
(This assignment carries 10% of course grade) 
Posted: Feb. 28, 2014;                                       Due Date: March 28, 2014 
Submit only the source code (.java files) to the Blackboard before due date 
Programming Assignment: Mail Client 
 
In this assignment, you will develop in Java a mail user agent with the following 
characteristics: 
 
 
 Provide a graphical interface for the sender, with fields for the local mail server, 
sender’s e-mail address, recipient e-mail address, subject of the message and the 
message itself. 
 Establishes a TCP connection between the mail client and the local mail server. 
Sends SMTP commands to local mail server. Receives and processes SMTP 
commands from local mail server. 
 
Here is what your interface will look like: 
 
 
You will develop the mail client so it sends e-mail message to at most one recipient at a 
time. Furthermore, the mail client will assume that the domain part of the recipient e-mail 
address is also the name of the recipient SMTP server.  
Program structure: The program contains four classes: 
 
MailClient   The user interface 
Message   Mail Message 
Envelope   SMTP envelope around the Message 
SMTP Connection  Manage Connection to SMTP server 
 You will complete the code in the SMTPConnection class so that in the end you will 
have a program that is capable of sending mail to any recipient. The places where you 
need to complete the code have been marked with the comments /* Fill in */ 
The MailClient class provides the user interface and calls the other classes as needed.  
When you press Send, the MailClient class constructs a Message class object to hold the 
mail message. The Message object holds the actual message headers and body. Then the 
MailClient object builds the SMTP envelope using the Envelope class. This class holds 
the SMTP sender and recipient information, the SMTP server of the recipient domain, 
and the Message object.  
 
Reply Codes:   
 
For the basic interaction of sending one message, you will only need to implement a part of 
SMTP. You need only to implement the commands in the following table. 
 
Command Reply Code 
DATA  354 
HELO  250 
MAIL FROM 250 
QUIT  221 
RCPT TO 250 
 
The above table also lists the accepted reply codes for each of the SMTP commands you 
need to implement. Fro simplicity, you can assume that any other reply from the server indicates 
a fatal error and abort the sending of the message. In reality, SMTP distinguishes between 
transient (reply codes 4xx) and the permanent (reply codes 5xx) errors and the sender is allowed 
to repeat commands that yielded in a transient error. 
 
In addition, when you open a connection to the server, it will reply with the code 220 
 
Programming Hints: 
 
1.  To make it easier to debug your program, DO NOT AT FIRST INCLUDE THE 
CODE THAT OPENS THE SOCKET.  
 
Instead, use the following definitions for fromServer and  toServer.  This way your 
program sends the commands to the terminal. Acting as the SMTP server, you will 
need to give the correct reply codes.  After your program works, then add the code 
for opening the socket to the server. 
 
fromServer =  new BufferedReader(new InputStreamReader(System.in)); 
 
to Server  =  System.out; 
 
 
2. The lines for opening and closing the socket., i.e., the lines connection = … in the 
constructor and the line connection.close()  in function close(), have been commented 
out.  
3. Start by completing the method  parseReply() You will need this method in many 
places. In the method  parseReply() it is recommended that you use the 
StringTokenizer class for parsing the reply strings.  
4. You can convert a string to an integer as follows: 
int   i   =  Integer.parseInt(...); 
5. In the method sendCommand() it is recommended that you should use writeBytes() to 
write the command to the server.  The advantage of using writeBytes() instead of 
using write() is that the writeBytes() automatically converts the string into bytes 
which is what the server expects. 
6. Do not forget to terminate each command with the string CRLF. 
7. You can throw exceptions like this: 
 
Throw new Exception(); 
You do not need to worry about the details, since exceptions in this lab are only used 
to signal an error, not to give detailed information about what went wrong.