Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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--;
}

}
}
}
}
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote