📄 handleconnection.java
字号:
// The Handle connection class - that deals will all client requests directly
import java.net.*;
import java.io.*;
import java.util.*;
public class Handleconnection extends Thread{
private String phonenumber;
private Message getmessage = new Message(null,null,null);
private String servernumber = "0000";
private Socket clientSocket; // Client socket object
private ObjectInputStream is; // Input stream
private ObjectOutputStream os; // Output stream
// The constructor for the connecton handler
public Handleconnection(Socket clientSocket)
{
this.clientSocket = clientSocket;
}
public void run()
{
try
{
this.is = new ObjectInputStream(clientSocket.getInputStream());
this.os = new ObjectOutputStream(clientSocket.getOutputStream());
this.readphonenumber();
while(true){this.readCommand();}
}
catch (IOException e)
{
e.printStackTrace();
MP_Server.status.setText(MP_Server
.status.getText()+e.toString()+"\n");
}
}
// Receive and process incoming phonenumber from client socket
private void readphonenumber()
{
try
{
getmessage = (Message)is.readObject();
}
catch (Exception e)
{
this.close();
}
if(getmessage.getoppositenumber().equals("0000")&& getmessage.getMessagetext().equals("sendnumber@"))
{
phonenumber=getmessage.getmynumber();
this.addnumber(phonenumber);
MP_Server.currentnumber.addItem(phonenumber);
}
}
// Receive and process incoming command from client socket
private void readCommand()
{
try
{
getmessage = (Message)is.readObject();
}
catch (Exception e)
{
this.senderrormessage();
}
if (getmessage.getMessagetext() == null)
{
this.sendvacantmessage();
}
else
{
// invoke the appropriate function based on the command
if (getmessage.getoppositenumber().equals("0000"))// verdict message send to themessageserver
{
if(getmessage.getMessagetext().equals("receive"))
{
this.sendmessage();
}
else
{
if(getmessage.getMessagetext().equals("closephone"))
{
this.removenumber(getmessage.getmynumber());
this.close();
}
else
{
this.senderrormessage();
}
}
}
else
{
if(getmessage.getoppositenumber().equals("000011"))
{
if(getmessage.getMessagetext().equals("send"))
{
this.receivepicturemessage();
}
else
{
this.sendpicturemessage();
}
}
else
{
// show total number of message
this.settotalnumber();
// show this message on lastmessage field
this.setmessage(getmessage);
//add this message in Vector
this.addmessage(getmessage);
this.setpernumber();
// show total size of message
this.settotalsize(getmessage);
}
}
}
}
public void senderrormessage()//the method to send a message tell client command is wrong
{
Message errormessage = new Message(servernumber,getmessage.getmynumber(),"You command is wrong !");
this.sendmessageatonce(errormessage);
}
public void sendvacantmessage()//the method to send a message tell client has send a vacant message
{
Message vacantmessage = new Message(servernumber,getmessage.getmynumber(),"Your message is vacant !");
this.sendmessageatonce(vacantmessage);
}
//the method to send a message at once need a Message
public synchronized void sendmessageatonce(Message amessage)
{
try
{
MP_Server.status.setText(MP_Server.
status.getText()+"Sending a message to "
+ getmessage.getmynumber()+"\n");
this.os.writeObject(amessage);
this.os.flush();
}
catch (Exception ex)
{
MP_Server.status.setText(MP_Server
.status.getText()+ex.toString()+"\n");
System.out.println(ex.toString());
}
}
public void close()//close the socket connection
{
try
{
MP_Server.status.setText(MP_Server.status.getText()+
"The phone "+getmessage.getmynumber()+" close !\n");
MP_Server.currentnumber.removeItem(getmessage.getmynumber());
this.os.close();
this.is.close();
this.clientSocket.close();
this.stop();
}
catch (Exception ex)
{
MP_Server.status.setText(MP_Server
.status.getText()+ex.toString()+"\n");
System.out.println(ex.toString());
}
}
//send picture message
public synchronized void sendpicturemessage()
{
try
{
FileInputStream fos=new FileInputStream(new File("newFile.jpg"));
byte[] buf=new byte[2048];
fos.read(buf);
try
{
this.os.writeObject(buf);
this.os.flush();
}
catch (Exception ex)
{
//receivemassagepage.setText("Cannot open socket connection\n"+ ex.toString());
}
}
catch (Exception ex)
{
System.out.println(ex.toString()+"123");
}
}
// receive picture message
public synchronized void receivepicturemessage()
{
try
{
File file=new File("newFile.jpg");
RandomAccessFile raf=new RandomAccessFile(file,"rw");
byte[] buf=new byte[2048];
buf=(byte[])is.readObject();
raf.write(buf);
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
}
//send message when get the command receive
public synchronized void sendmessage()
{
Iterator theData = MP_Server.TheMessageServerVector.iterator();
//choose the frist message to this number to send
Message amessage = new Message(null,null,null);
int i=MP_Server.TheMessageServerVector.size();
int k=0;
if (i>0)
{
int j=0;
while (j<i)
{
amessage.setmessage((Message)MP_Server.TheMessageServerVector.get(j));
if(amessage.getoppositenumber().equals(getmessage.getmynumber()))
{
this.sendmessageatonce(amessage);
k=1;
//remove the message which has be send
MP_Server.TheMessageServerVector.remove(j);
break;
}
j++;
}
}
if(k==0)
{
Message nullmessage = new Message(servernumber,getmessage.getmynumber(),
"You do not have a message!");
this.sendmessageatonce(nullmessage);
}
}
//remove the closed phone number in Vector
public synchronized void removenumber(String anumber)
{
MP_Server.TheMessageServerNumberVector.remove(anumber);
}
// find the opposite number is on line or not
public boolean findnumber(String number)
{
Iterator theData = MP_Server.TheMessageServerNumberVector.iterator();
int i = 0;
while (theData.hasNext())
{
if (((String)theData.next()).equals(number))
{
i=1;
}
}
if(i==1)
{
return true;
}
else
{
return false;
}
}
// send a message to client tell them that they have some message
public int getcount(String number)
{
Iterator theData = MP_Server.TheMessageServerVector.iterator();
int i = 0;
while (theData.hasNext())
{
if (((Message)theData.next()).getoppositenumber().equals(number))
{
i++;
}
}
return i;
}
public synchronized void addmessage(Message amessage)
{
MP_Server.TheMessageServerVector.add(amessage);
}
public synchronized void addnumber(String anumber)
{
MP_Server.TheMessageServerNumberVector.add(anumber);
}
public synchronized void setmessage(Message amessage)
{
MP_Server.detail.setText(amessage.getMessagetext());
}
public synchronized void settotalnumber()
{
MP_Server.messagenumber++;
MP_Server.numberot.setText("There are"+MP_Server
.messagenumber+"already!");
}
public synchronized void settotalsize(Message amessage)
{
long totalsize=amessage.getMessagetext().length();
MP_Server.messagesize=MP_Server.messagesize+totalsize;
MP_Server.physize.setText(MP_Server.messagesize+"byte");
}
public synchronized void setpernumber()
{
double pernumber= MP_Server.messagenumber/MP_Server.TheMessageServerNumberVector
.size();
MP_Server.numberpp.setText("the number per phone is"+pernumber);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -