package socket.demo;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.Timer;
public class Client implements ActionListener
{
Timer t = new Timer(1000, this);//定时器,发出通告的时间间隔
JFrame jf = new JFrame("登录");
JFrame jf1 = new JFrame("聊天室");
JTextArea jta = new JTextArea(13, 20);
JTextField jtt = new JTextField(15);
JTextField jtf1 = new JTextField(15);
JTextField jtf2 = new JTextField(15);
JLabel jl = new JLabel();
String username = " ";
String qq = "";
String s = " ";
Socket so;
DataInputStream dis;
DataOutputStream dos;
public Client() throws Exception
{
getFrame();
so = new Socket("127.0.0.1", 9988);
dis = new DataInputStream(so.getInputStream());
dos = new DataOutputStream(so.getOutputStream());
}
public static void main(String[] args) throws Exception
{
new Client();
}
public void actionPerformed(ActionEvent e)
{
String com = e.getActionCommand();
if ("进入".equals(com))
{
jf.dispose();
qq();
username = jtf1.getText();
qq = jtf2.getText();
jl.setText("用户:" + username + "<" + qq + ">");
s = " 欢迎" + username + "进入聊天室!";
try
{
dos.writeUTF(s);
jta.setText(dis.readUTF());
} catch (Exception ee)
{
ee.printStackTrace();
}
}
if ("取消".equals(com))
{
jtf1.setText("");
}
if ("离开".equals(com))
{
try
{
dos.writeUTF(username + "离开了聊天室!");
dis.close();
dos.close();
so.close();
System.exit(1);
} catch (Exception ee)
{
ee.printStackTrace();
}
}
if ("发送".equals(com))
{
s = jtt.getText();
jtt.setText("");
try
{
dos.writeUTF(username + ":" + s);
jta.setText(dis.readUTF());
t.start(); //启动定时器
} catch (Exception ee)
{
}
} else
{
try
{
dos.writeUTF(" ");
String g = dis.readUTF();
if (g.equals(jta.getText()) == false)
{
jta.setText(g);
}
} catch (Exception ee)
{
ee.printStackTrace();
}
}
}
public void getFrame() throws Exception
{
jf.setLayout(new GridLayout(3, 1));
JPanel jp = new JPanel();
jp.setLayout(new FlowLayout());
JPanel jp1 = new JPanel();
jp1.setLayout(new FlowLayout());
JLabel jl1 = new JLabel("用户名:");
JPanel jp2 = new JPanel();
jp2.setLayout(new FlowLayout());
JLabel jl2 = new JLabel("QQ号:");
jf.add(jp);
jf.add(jp2);
jf.add(jp1);
jp.add(jl1);
jp.add(jtf1);
jp2.add(jl2);
jp2.add(jtf2);
JButton jb1 = new JButton("进入");
JButton jb2 = new JButton("取消");
jp1.add(jb1);
jp1.add(jb2);
jb1.addActionListener(this);
jb2.addActionListener(this);
jf.pack();
jf.setLocation(300, 200);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void qq()
{
JPanel jp = new JPanel();
JPanel jp1 = new JPanel();
JPanel jp2 = new JPanel();
JButton jb = new JButton("发送");
JButton jb1 = new JButton("离开");
jb.addActionListener(this);
jb1.addActionListener(this);
jtt.addActionListener(this);
jp1.add(jl);
jp1.add(jb1);
jp2.add(jtt);
jp2.add(jb);
jf1.add(jp, BorderLayout.NORTH);
jp.setLayout(new GridLayout(2, 1));
jp.add(jp1);
jp.add(jp2);
jta.setEditable(false);
jf1.add(jta, BorderLayout.CENTER);
jf1.add(new JScrollPane(jta));
jf1.pack();
jf1.setLocation(400, 300);
jf1.setVisible(true);
jf1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
package socket.demo;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
public class ServerThread extends Thread
{
private Socket so;
private static String temp = "";
public ServerThread(Socket so)
{
this.so = so;
}
public void run()
{
try
{
DataInputStream dis = new DataInputStream(so.getInputStream());
DataOutputStream dos = new DataOutputStream(so.getOutputStream());
while (true)
{
String s = dis.readUTF();
if (!" ".equals(s))
temp = s + "\n" + temp;
if ("bye".equals(s))
break;
dos.writeUTF(temp);
}
dis.close();
dos.close();
} catch (Exception ee)
{
ee.printStackTrace();
} finally
{
try
{
so.close();
System.out.println("end");
} catch (Exception ee)
{
ee.printStackTrace();
}
}
}
}
package socket.demo;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Server implements ActionListener, Runnable
{
JFrame jf = new JFrame("服务器启动");
JLabel jl = new JLabel("已启动服务器");
Socket so;
public Server()
{
getFrame();
}
public void getFrame()
{
JButton jb = new JButton("连接");
jf.add(jl, BorderLayout.CENTER);
jf.add(jb, BorderLayout.SOUTH);
jb.addActionListener(this);
jf.setSize(200, 150);;
jf.setLocation(400, 300);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e)
{
String com = e.getActionCommand();
if ("连接".equals(com))
{
try
{
jl.setText("连接中......");
new Thread(this).start();
Thread.sleep(3000);
} catch (Exception ee)
{
ee.printStackTrace();
}
}
jl.setText("连接成功!!!");
}
public void run()
{
try
{
ServerSocket ss = new ServerSocket(9988);
System.out.println("begin");
while (true)
{
so = ss.accept();
System.out.println("connect");
new ServerThread(so).start();
}
} catch (Exception ee)
{
ee.printStackTrace();
}
}
public static void main(String[] args)
{
new Server();
}
}