📄 server.java
字号:
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Server extends JFrame
{
private JTextField enterField,enterField1;
private JTextArea displayArea;
private ObjectOutputStream output;
private ObjectInputStream input;
private ServerSocket server;
private Socket connection;
private int counter = 1;
private JButton btn;
int sum = 10000;
char ch[]=new char[sum];
int t,flag;
String MESSAGE="";
//set up GUI
public Server()
{
super("Server");
Container container = getContentPane();
//create enterField and register listener
enterField = new JTextField();
enterField1 = new JTextField();
btn = new JButton("解密");
enterField.setEditable(false);
btn.setEnabled(false);
enterField.addActionListener(
new ActionListener()
{
//send message to client
public void actionPerformed(ActionEvent event)
{
sendData(event.getActionCommand());
enterField.setText("");
}
}
);
enterField1.addActionListener(
new ActionListener()
{
//send message to client
public void actionPerformed(ActionEvent event)
{
t=Integer.parseInt(enterField1.getText())%26;
}
}
);
btn.addActionListener(
new ActionListener()
{
//send message to client
public void actionPerformed(ActionEvent event)
{
jiemi();
}
}
);
container.add(enterField,BorderLayout.SOUTH);
container.add(enterField1,BorderLayout.NORTH);
container.add(btn,BorderLayout.EAST);
//creat displayArea
displayArea = new JTextArea();
container.add(new JScrollPane(displayArea),BorderLayout.CENTER);
setSize(400,200);
setVisible(true);
} //end Server constructor
//set up and run Server
public void runServer()
{
//set up server to receive connections;process connections
try
{
//step 1:Create a ServerSocket.
server = new ServerSocket(12345,100);
while(true)
{
try
{
waitForConnection();//Step 2:Wait for a connection.
getStreams();//Step 3:Get input & output streams.
processConnection();//Step 4:Process connection.
}
//proess EOFException when client closes connection
catch(EOFException eofException){
System.err.println("Server terminated connection");
}
finally{
closeConnection(); //Step 5:Close connection
++counter;
}
} //end while
} //end try
//process problems with I/O
catch(IOException ioException){
ioException.printStackTrace();
}
} //end method runserver
//wait for connection to arrive,then display connection info
private void waitForConnection() throws IOException
{
flag = 0;
displayMessage("Waiting for connection\n");
connection = server.accept(); //allow server to accept connection
displayMessage("Connection " + counter +" received from: " +
connection.getInetAddress().getHostName() );
}
//get streams to send and receive data
private void getStreams() throws IOException
{
//set up output stream for objects
output = new ObjectOutputStream(connection.getOutputStream());
output.flush();//flush output buffer to send header information
//set up input stream for objects
input = new ObjectInputStream(connection.getInputStream());
displayMessage("\nGot I/O streams\n");
displayMessage("\n" + "请在顶端输入密钥(任意整数),按回车确认");
displayMessage("\n" + "请在底端输入信息,按回车加密并发送");
}
//process connection with Client
private void processConnection() throws IOException
{
//send connection successful message to client
String message = "Connection successful";
int i,len4;
// t=Integer.parseInt(enterField1.getText())%26;
sendData(message);
//enable enterField so server user can send messages
setTextFieldEditable(true);
btn.setEnabled(true);
do{//process messages sent from client
//read message and display it
try{
message = (String) input.readObject();
MESSAGE = message;
displayMessage("\nCLIENT>>>" + message );
// btn.setEnabled(true);
}
//catch problem s reading from client
catch(ClassNotFoundException classNotFoundException){
displayMessage("\nUnknown object type received");
}
}while(!message.equals("\0"));
}// end method processConnection
private void jiemi()
{
int len5,i;
// MESSAGE = (String) input.readObject();
len5=MESSAGE.trim().length();
for(i=0;i<len5;i++)
{
ch[i]=MESSAGE.charAt(i);
if(ch[i]>='a'&&ch[i]<='z')
{
if(ch[i]<97+t)
ch[i]+=26-t;
else
ch[i]-=t;
}
else if(ch[i]>='A'&&ch[i]<='Z')
{
if(ch[i]<65+t)
ch[i]+=26-t;
else
ch[i]-=t;
}
}
displayArea.append("\n" + " 上述信息解密为SERVER>>>");
for(i=0;i<len5;i++)
{
displayArea.append(""+ch[i]);
}
if ((enterField1.getText()).equals(""))
{
displayArea.append(" 您所输入的密钥为空" + enterField1.getText());
}
else
{
displayArea.append(" 您所输入的密钥为" + enterField1.getText());
}
// MESSAGE = "";
}
private void closeConnection()
{
displayMessage("\nTerminating connection\n");
setTextFieldEditable(false); //disable enterField
try{
output.close();
input.close();
connection.close();
}
catch(IOException ioException){
ioException.printStackTrace();
}
}
// send message to clilent
private void sendData(String message)
{
//send object to client
int len4,i;
try{
len4=message.trim().length();
for(i=0;i<len4;i++)
{
ch[i]=message.charAt(i);
if(ch[i]>='a'&&ch[i]<='z')
{
if(ch[i]>(122-t))
{
ch[i]+=t-26;
}
else
{
ch[i]+=t;
//message.indexOf(i)+=t;
}
}
else if(ch[i]>='A'&&ch[i]<='Z')
{
if(ch[i]>90-t)
{
ch[i]+=t-26;
// message.charAt(i)+=t-26;
}
else
{
ch[i]+=t;
// message.charAt(i)+=t;
}
}
}
flag++;
displayMessage("\nSERVER>>>" + message );
if (flag > 1)
{
if(enterField1.getText().trim().equals(""))
{
displayMessage(" 密钥为空" );
}
else
{
displayMessage(" 密钥为" + enterField1.getText());
}
}
message = "";
for(i=0;i<len4;i++)
{
message+=ch[i];
}
MESSAGE = message;
output.writeObject(message);
output.flush();
}
//process problems sending object
catch(IOException ioException){
displayArea.append("\nError writing object");
}
}
//utility method called from other threads to manipulate
//displayArea in the event-dispatch thread
private void displayMessage(final String messageToDisplay)
{
// display message from event-dispatch thread of execution
SwingUtilities.invokeLater(
new Runnable(){//inner class to ensure GUI updates properly
public void run() //updates displayArea
{
displayArea.append(messageToDisplay);
displayArea.setCaretPosition(
displayArea.getText().length());
}
}//end inner class
); //end call to SwingUtilities.invokeLater
}
//utility method called from other threads to manipulate
//enterField in the event-dispatch thread
private void setTextFieldEditable(final boolean editable)
{
//display message from event-dispatch thread of execution
SwingUtilities.invokeLater(
new Runnable(){//inner class to ensure GUI updates properly
public void run() // sets enterField's editability
{
enterField.setEditable(editable);
btn.setEnabled(false);
}
}//end inner class
);//end call to SwingUtilities.invokeLater
}
public static void main(String args[])
{
Server application = new Server();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
application.runServer();
}
}//end class Server
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -