Write a smtp client program and smtp server program to inplement the following s
ID: 3800064 • Letter: W
Question
Write a smtp client program and smtp server program to inplement the following simplified smtp protocol based on the tcp service and make sure the programSupports mulltiple clientes.
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception {
System.out.println("Stablishing connection");
ServerSocket server = new ServerSocket(25);
System.out.println("guardando concexion.");
Socket socket = server.accept();
System.out.println("conexion establecida.");
InputStream input = socket.getInputStream();
OutputStream output = socket.getOutputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(input));
PrintStream out = new PrintStream(output);
while (true){
String mensagem = in.readLine();
System.out.println(
"Mensagem recebida do cliente [" +
socket.getInetAddress().getHostName() +
"]: " +
mensagem);
if ("FIM".equals(mensagem)){
break;
}
out.println(mensagem);
}
System.out.println("Encerrado servidor");
in.close();
out.close();
socket.close();
System.out.println("Encerrado servidor");
server.close();
}
}
========================================================
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Properties;
import java.util.Scanner;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Client {
public static BufferedReader in;
public static PrintStream out;
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter the HostName (or ip address) of your SMTP server");
String ipAddress = scanner.nextLine();
//Buildup the TCP connection to your smtp server
System.out.println("stablishing connection");
System.out.println("Initializing connection with the servidor.");
try {
Socket socket = new Socket(ipAddress, 25);//aqio en puerto va ipaddress
System.out.println("Connection stablished");
InputStream input = socket.getInputStream();
OutputStream output = socket.getOutputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(input));
PrintStream out = new PrintStream(output);
//printstream para guardar strings.podemos leer mjs de cliente
/**
* Wait for, read and display a 220 response from he SMTP server
*
*/
while(true) {
System.out.println("Digito mimensaje para mandarlo a servidor.| 220 smtp.server.com Simple Mail Transfer Service Ready ");
String mensagem = scanner.nextLine();
out.println(mensagem);
if("FIM".equals(mensagem)){
break;
}
mensagem = in.readLine();
System.out.println(
"mensagem recibido do servodor: " +
mensagem);
}
} catch (Exception e) {// esto es igual q cachar UnknownHostException
System.out.println("The given Enter the HostName (or ip address) of "
+ "your SMTP server, was not recognized " + ipAddress);
System.exit(0);//a nonzero indica abnormal condicion
}
}
}
Explanation / Answer
import java.awt.*;
import java.io.*;
import java.net.*;
import java.awt.event.*;
public class Chat extends Frame implements Runnable,ActionListener
{
int port=1976;
Socket socket;
DataInputStream dis;
PrintStream ps;
String UserName;
boolean connected,newUser=true;
Thread thread;
int retry=0;
TextField ChatMessage;
TextArea ChatArea;
Button Connect,Send,Disconnect;
Panel ChatPanel,ButtonPanel,TextPanel;
public Chat()
{
ChatPanel = new Panel();
ChatPanel.setLayout(new BorderLayout());
ChatArea=new TextArea();
ChatPanel.add(ChatArea);
TextPanel = new Panel();
TextPanel.setLayout(new BorderLayout());
ChatMessage=new TextField(20);
TextPanel.add(ChatMessage);
ButtonPanel = new Panel();
ButtonPanel.setLayout(new GridLayout(1,3));
Connect =new Button("Connect");
Send =new Button("Send");
Disconnect=new Button("Disconnect");
Connect.addActionListener(this);
Send.addActionListener(this);
Disconnect.addActionListener(this);
ButtonPanel.add(Connect);
ButtonPanel.add(Send);
ButtonPanel.add(Disconnect);
setLayout(new BorderLayout());
setForeground(Color.blue);
add("Center",ChatPanel);
add("South",TextPanel);
add("North",ButtonPanel);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
stop();
newUser=true;
System.exit(0);
}
});
show();
start();
}
public void start()
{
ChatArea.setText("Enter your name ");
ChatArea.appendText("and Press Connect ");
ChatMessage.requestFocus();
}
public void stop()
{
try
{
send(UserName + " has left the room");
dis.close();
ps.close();
socket.close();
}catch(Exception e)
{
System.out.println("Error in stop..." + e);
}
if((thread != null) && (thread.isAlive()))
{
thread.stop();
thread=null;
}
}
public void run()
{
String str;
try
{
for(;;)
{
str=dis.readLine();
if(str!=null)
ChatArea.appendText(str+" ");
else
{
if(retry<=2)
{
ChatArea.appendText("Connection lost ");
ChatArea.appendText("Attempting to reConnect ");
retry++;
reConnect();
}
else
{
ChatArea.appendText("Tried to reconnect 3 times ");
ChatArea.appendText ("The Server is likely down ");
ChatArea.appendText("Try again after some time ");
try
{
dis.close();
ps.close();
socket.close();
}catch(Exception e)
{
System.out.println("Error here..." + e);
}
thread.stop();
thread=null;
}
}
}
}
catch(Exception e)
{
System.out.println("Error here in Run Method... "+e);
}
}
public void actionPerformed(ActionEvent e)
{
if((e.getSource()==Send))
{
if(newUser==true)
{
ChatArea.appendText("You must logon before attempting to chat ");
ChatArea.appendText("Type your Name to logon");
ChatMessage.requestFocus();
}
else
{
send(ChatMessage.getText());
ChatMessage.setText("ravi");
ChatMessage.requestFocus();
}
}
else if(e.getSource()==Connect)
{
if(newUser==true)
{
connect();
newUser=false;
UserName=ChatMessage.getText();
ChatMessage.setText("");
ChatMessage.requestFocus();
setTitle(UserName);
ChatArea.setText(UserName + " : Begin Chatting ");
}
else
ChatArea.appendText("Already Connected");
}
else if(e.getSource()==Disconnect)
{
stop();
newUser=true;
System.exit(0);
// ChatArea.setText("Enter your name and press connect ");
// ChatMessage.requestFocus();
}
}
public boolean connect()
{
boolean Connected =true;
try
{
socket =new Socket("127.0.0.1",1976);
dis=new DataInputStream(socket.getInputStream());
ps=new PrintStream(socket.getOutputStream());
thread=new Thread(this);
thread.start();
}
catch(Exception e)
{
System.out.println("Error in connect..." + e);
}
return Connected;
}
public boolean reConnect()
{
boolean Reconnect;
Reconnect=connect();
if(Reconnect)
Reconnect=true;
else
Reconnect=false;
return Reconnect;
}
public void send(String str)
{
ps.println(UserName+":"+str);
}
public static void main(String a[])
{
Chat chat=new Chat();
chat.setSize(400,200);
chat.setVisible(true);
}
}
import java.net.*;
import java.awt.*;
import java.util.*;
import java.io.*;
public class ChatClient extends Thread
{
protected static int ID=-1;
protected String name;
protected Socket socket;
DataInputStream dis;
PrintStream ps;
ChatServer server;
Watcher watcher;
public ChatClient(ChatServer server,Socket socket,ThreadGroup tg,Watcher watcher)
{
super(tg,"Client # "+ ++ID);
this.server=server;
this.socket=socket;
this.watcher=watcher;
this.name="Default";
try
{
dis=new DataInputStream(socket.getInputStream());
ps=new PrintStream(socket.getOutputStream());
}catch(Exception e)
{
System.out.println("Error in constructor..." + e);
}
start();
}
public void run()
{
String str;
int length;
ps.println("Welcome to the Chat room");
try
{
for(;;)
{
str=dis.readLine();
System.out.println(str);
if((str!=null)||(str!=""))
sendToAll(str);
else
break;
}
}catch(Exception e)
{
System.out.println("Error in run..." + e);
}
finally
{
try
{
dis.close();
ps.close();
socket.close();
}catch(Exception e)
{
System.out.println("Error closing..." + e);
}
}
synchronized(watcher)
{
watcher.notify();
}
}
public void sendToOne(String s)
{
ps.println(s);
ps.flush();
}
public void sendToAll(String s)
{
int clientNumber;
clientNumber=server.clientVector.size();
System.out.println(clientNumber);
for(int i=0;i<clientNumber;i++)
{
ChatClient cc=(ChatClient)server.clientVector.elementAt(i);
cc.sendToOne(s);
}
}
}
import java.net.*;
import java.awt.*;
import java.util.*;
import java.io.*;
public class ChatServer extends Thread
{
private final static int port=1976;
ServerSocket server;
ThreadGroup tg;
java.awt.List clientList;
Vector clientVector;
Watcher watcher;
Frame frame;
public static void main(String a[])
{
new ChatServer();
}
public ChatServer()
{
super();
try
{
server=new ServerSocket(port);
System.out.println("Wating for client");
}catch(Exception e)
{
System.out.println("Error in ServerSocket..."+e);
}
tg=new ThreadGroup("Connection");
clientList=new java.awt.List();
clientVector=new Vector();
watcher=new Watcher(this);
frame = new Frame("SSIS Chat");
frame.setSize(400,100);
frame.add("Center",clientList);
frame.setVisible(true);
start();
}
public void run()
{
try
{
for(;;)
{
Socket client= server.accept();
// DataInputStream dis = new DataInputStream(client.getInputStream());
ChatClient cc=new ChatClient(this,client,tg,watcher);
synchronized(clientVector)
{
clientVector.addElement(cc);
// System.out.println(cc.toString());
clientList.addItem(cc.name);
}
}
}catch(Exception e)
{
System.out.println("Error in Server run... "+e);
}
}
}
public class Watcher extends Thread
{
ChatServer server;
int clientNumber;
Watcher(ChatServer server)
{
super(server,"Connection Monitor");
this.server=server;
start();
}
public synchronized void run()
{
for(;;)
{
try
{
this.wait(2500);
}catch(Exception e)
{
System.out.println("Error in run.." + e);
}
synchronized(server.clientVector)
{
clientNumber=server.clientVector.size();
for(int i=0;i<clientNumber;i++)
{
ChatClient cc=(ChatClient)server.clientVector.elementAt(i);
if(cc.isAlive()==false)
{
server.clientVector.removeElement(cc);
server.clientList.delItem(i);
clientNumber--;
}
}
}
}
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.