📄 client.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 + -