⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.java

📁 在本机上实现模拟通信
💻 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 + -