服务器端:
java 代码
- import java.io.*;
- import java.net.*;
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- import java.util.*;
- public class ChatServe extends JFrame implements ActionListener{
- //文本区域类,用于向对方发送信息
- private JTextField jtf=new JTextField();
- //文本域类,用于记录双方聊天记录
- private JTextArea jta=new JTextArea();
- //来自客户端的信息
- private DataInputStream msgFromClient;
- //发往客户端的信息
- private DataOutputStream msgToClient;
- public static void main(String[] args) {
- new ChatServe();
- }
- public ChatServe(){//服务器端类的构造函数
- //建立一个写信息的面板
- JPanel p=new JPanel();
- p.setLayout(new BorderLayout());
- p.add(new JLabel("写信息:"),BorderLayout.WEST);
- p.add(jtf,BorderLayout.CENTER);
- jtf.setHorizontalAlignment(JTextField.LEFT);
- getContentPane().setLayout(new BorderLayout());
- //把聊天记录区加到内容面板并加上一个滚动条
- getContentPane().add(p,BorderLayout.SOUTH);
- getContentPane().add(new JScrollPane(jta),BorderLayout.CENTER);
- //触发事件监听器
- jtf.addActionListener(this);
- setTitle("聊天程序服务器端");
- setSize(500,300);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- setVisible(true);
- try{
- //建立服务器SOCKET
- ServerSocket serverSocket=new ServerSocket(8000);
- jta.append("聊天服务器开始时间"+new Date()+'\n');
- Socket socket=serverSocket.accept();
- msgFromClient=new DataInputStream(socket.getInputStream());
- msgToClient=new DataOutputStream(socket.getOutputStream());
- }
- catch(IOException ex){
- System.out.println(ex);
- }
- }
- public void actionPerformed(ActionEvent e){
- String actionCommand=e.getActionCommand();
- if(e.getSource() instanceof JTextField){
- try{
- String ToClient=jtf.getText().trim();
- msgToClient.writeBytes(ToClient);
- msgToClient.flush();
- jta.append("服务器:"+ToClient+'\n');
- String FromClient=msgFromClient.readUTF();
- jta.append("客户端:"+msgFromClient+'\n');
- }
- catch(IOException ex){
- System.out.println(ex);
- }
- }
- }
- }
客 户端:
java 代码
- import java.io.*;
- import java.net.*;
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- import java.util.*;
- public class ChatClient extends JFrame implements ActionListener{
- //文本区域类,用于记录双方聊天内容
- private JTextField jtf=new JTextField();
- private JTextArea jta=new JTextArea();
- private DataInputStream msgFromServer;
- private DataOutputStream msgToServer;
- public static void main(String[] args) {
- new ChatClient();
- }
- public ChatClient(){//服务器端类的构造函数
- JPanel p=new JPanel();
- p.setLayout(new BorderLayout());
- p.add(new JLabel("写信息:"),BorderLayout.WEST);
- p.add(jtf,BorderLayout.CENTER);
- jtf.setHorizontalAlignment(JTextField.LEFT);
- getContentPane().setLayout(new BorderLayout());
- //把聊天记录区加到内容面板并加上一个滚动条
- getContentPane().add(p,BorderLayout.SOUTH);
- getContentPane().add(new JScrollPane(jta),BorderLayout.CENTER);
- jtf.addActionListener(this);
- setTitle("聊天程序客户端");
- setSize(500,300);
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- setVisible(true);
- try{
- //建立SOCKET
- jta.append("聊天服务器开始时间"+new Date()+'\n');
- Socket socket=new Socket("localhost",8000);
- msgFromServer=new DataInputStream(socket.getInputStream());
- msgToServer=new DataOutputStream(socket.getOutputStream());
- }
- catch(IOException ex){
- System.out.println(ex);
- }
- }
- public void actionPerformed(ActionEvent e){
- String actionCommand=e.getActionCommand();
- if(e.getSource() instanceof JTextField){
- try{
- String ToServer=jtf.getText().trim();
- msgToServer.writeBytes(ToServer);
- msgToServer.flush();
- jta.append("客户端:"+ToServer+'\n');
- String FromServer=msgFromServer.readUTF();
- jta.append("服务器:"+FromServer+'\n');
- }
- catch(IOException ex){
- System.out.println(ex);
- }
- }
- }
- }