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

📄 client.java

📁 在本机上实现模拟通信
💻 JAVA
字号:
//Fig .18.5:Client.java
//Client that reads and displays information sent from aServer
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Client extends JFrame{
	private JTextField enterField,enterField1;
	private JTextArea displayArea;
	private ObjectOutputStream output;
	private ObjectInputStream input;
	private String message = "";
	private String chatServer;
	private Socket client;
	private JButton btn;
	int sum = 10000;
	char ch[]=new char[sum];
	int t;
	int flag = 0;
	String MESSAGE;
	
	//initialize chatServer and set up GUI
	public Client(String host)
	{
		super("Client");
		
		chatServer = host; //set server to which this client connects
		
		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 server
				public void actionPerformed(ActionEvent event)
				{
					sendData(event.getActionCommand());
					enterField.setText("");
				}
			}
			);
			
				enterField1.addActionListener(
			new ActionListener(){
				
				//send message to server
				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);
		
			//create displayArea
			displayArea = new JTextArea();
			container.add(new JScrollPane(displayArea),	BorderLayout.CENTER);
			displayArea.setEditable(false);
			
			setSize(440,200);
			setVisible(true);
			
	}//end Client constructor
	
	
	
	//connect to server and process message from server
	private void runClient()
	{
		//connect  to server,get streams,process connection
		try{
			connectToServer(); //Step 1:Create a Socket to make connection
			getStreams();  //Step 2:Get the input and output streams
			processConnection(); //Step 3:Process connection
		}
		
		//server closed connection
		catch(EOFException eofException ){
			System.err.println("Client terminateed connection");
		}
	    //process problems communicating with server
	    catch(IOException ioException){
	    	ioException.printStackTrace();
	    }
	    
	    finally{
	    	closeConnection();  //Step 4:Close connection
	    }
	} //end method runClient
	
	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 = "";
		
}
	
	//connec to server
	private void connectToServer() throws IOException
	{
		displayMessage("Attempting connection\n");
		
		//create Socket to make connection to server
		client = new Socket(InetAddress.getByName(chatServer),12345);
		
		//display connection  information
		displayMessage("Connected to:" + 
		client.getInetAddress().getHostName());
		
	}
	// get streams to send and receive data
	private void getStreams() throws IOException
	{
		// set up output stream for objects
		output = new ObjectOutputStream(client.getOutputStream());
		output.flush();   //flush output buffer to send header information
		
		//set up input stream for objects
		input = new ObjectInputStream(client.getInputStream());
		
		displayMessage("\nGot I/O streams\n");	
			displayMessage("\n" + "请在顶端输入密钥(任意整数),按回车确认");
	displayMessage("\n" + "请在底端输入信息,按回车加密并发送");
	}
	
	//process connection with server
	
	private void processConnection() throws IOException
	{
		
		//int t;
		//t=Integer.parseInt(enterField1.getText())%26;
	
		// enable enterField so client user can send messages
		setTextFieldEditable(true);
	btn.setEnabled(true);
		do{//process message sent from server
		
		//read message and display it
		try{
			message = (String) input.readObject();
			flag++;
			MESSAGE = message;
			displayMessage("\nSERVER>>>" + message);
		//	btn.setEnabled(true);
		
		
				
		}
		
		//catch problems reading from server
		catch(ClassNotFoundException classNotException){
			displayMessage("\nUnknown object type received");
		}
		}while(!message.equals("\0"));
	}//end method processConnection
	
	//close stream and socket
	private void closeConnection()
	{
		displayMessage("\nClosing connection");
		setTextFieldEditable(false); //disable enterField
		
		try{
			output.close();
			input.close();
			client.close();
		}
		catch(IOException ioException){
			ioException.printStackTrace();
		}
	}
	
	private void sendData(String message)
{
	//send object to server
	int i,len4;
	try{
			
			displayMessage("\nCLIENT>>>" + message );
			if (enterField1.getText().trim().equals(""))
				{
					displayMessage("  密钥为空" );
				}
				else
				{
					displayMessage("  密钥为" + enterField1.getText());
				}
			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;
					}
				}
			}
			
			message ="";
			for(i=0;i<len4;i++)
			{
				message+=ch[i];
			}
		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 GUI 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 GUI thread of execution
	SwingUtilities.invokeLater(
		new Runnable() {//inner class to ensure GUI updates properly
			public void run()  //sets enterField's editablity
			{
				enterField.setEditable(editable);
				btn.setEnabled(false);
			}
		}          //end inner class
		);          // end call to SwingUtilities.invokeLater
}

public static void main(String args[])
{
	Client application;
	if(args.length == 0)
		application = new Client("127.0.0.1");
	else
		application = new Client(args[0]);
	application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	application.runClient();
}

	
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -