演示
服务端
package qiu;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.Printable;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Calendar;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**
* 简单聊天软件的服务器
* */
public class MyServer extends JFrame implements ActionListener{
JTextArea jTextArea =null;
JTextField jTextField=null;
JButton sendButton=null;
JPanel jPanel=null;
JScrollPane jScrollPane =null;
PrintWriter printWriter =null;
/**
* 服务端的主函数
* */
public static void main(String[] args) {
new MyServer();
}
/**
* 服务端的构造函数,用来进行初始化
* */
public MyServer(){
jTextArea = new JTextArea();
jTextField= new JTextField(20);
sendButton= new JButton("发送");
sendButton.addActionListener(this);
sendButton.setActionCommand("send");
jScrollPane= new JScrollPane(jTextArea);
jPanel = new JPanel();
jPanel.add(jTextField);
jPanel.add(sendButton);
this.add(jScrollPane,BorderLayout.CENTER);
this.add(jPanel,BorderLayout.SOUTH);
this.setSize(400,300);
this.setTitle("聊天服务器");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setResizable(true);
try {
ServerSocket ss = new ServerSocket(9988);
Socket socket = ss.accept();
BufferedReader br = new BufferedReader
(new InputStreamReader(socket.getInputStream()));
printWriter = new PrintWriter(socket.getOutputStream(),true);
while(true){
String info = br.readLine();
jTextArea.append("客户端 "+getTime()+"\r\n"+info+"\r\n");
}
} catch (IOException e) {
e.printStackTrace();
} }
/**
* 用来获取当前的时间
* @return 当前的时间
*/
public String getTime(){
Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
return hour+":"+minute+":"+second;
}
/**
* 当button被点击的时候调用
*/
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("send")){
String info= jTextField.getText();
jTextArea.append("服务器 "+getTime()+"\r\n"+info+"\r\n");
printWriter.println(info);
jTextField.setText("");
}
}
}
客户端
package qiu;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Calendar;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**
* 简单聊天软件的客户端
* */
public class MyClient extends JFrame implements ActionListener{
JTextArea jTextArea=null;
JTextField jTextField=null;
JPanel jPanel=null;
JScrollPane jScrollPane=null;
JButton sendButton=null;
PrintWriter printWriter=null;
/**
* 客户端的主函数
* */
public static void main(String[] args) {
new MyClient();
}
/**
* 客户端构造函数用来初始化
* */
public MyClient(){
jTextArea= new JTextArea();
jTextField=new JTextField(20);
sendButton= new JButton("发送");
sendButton.addActionListener(this);
sendButton.setActionCommand("send");
jScrollPane=new JScrollPane(jTextArea);
jPanel=new JPanel();
jPanel.add(jTextField);
jPanel.add(sendButton);
this.add(jScrollPane,BorderLayout.CENTER);
this.add(jPanel,BorderLayout.SOUTH);
this.setSize(400, 300);
this.setTitle("聊天客户端");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setResizable(true);
try {
Socket s= new Socket("127.0.0.1",9988);
BufferedReader br = new BufferedReader
(new InputStreamReader(s.getInputStream()));
printWriter= new PrintWriter(s.getOutputStream(),true);
while(true){
String string=br.readLine();
jTextArea.append("服务器 "+getTime()+"\r\n"+string+"\r\n");
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 用来获取当前的时间
* @return 当前的时间
*/
public String getTime(){
Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
return hour+":"+minute+":"+second;
}
/**
* 当button被点击的时候调用
*/
@Override
public void actionPerformed(ActionEvent e) {
if(sendButton.getActionCommand().equals("send")){
String info= jTextField.getText();
jTextArea.append("客户端 "+getTime()+"\r\n"+info+"\r\n");
printWriter.println(info);
jTextField.setText("");
}
}
}