1.客户端
package com.client;
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.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import com.ui.ChatUI;
public class Client extends ChatUI implements ActionListener
{
private String content = "";
Socket socket;
DateFormat df = new
SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static int i;
public Client() {
super("�客户端:");
getSendBtn().addActionListener(this);
getCancelBtn().addActionListener(this);
try {
++i;
socket = new
Socket("localhost", 1234);
} catch (UnknownHostException
e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void actionPerformed(ActionEvent e)
{
if
(e.getActionCommand().equals("Send")) {
String msg =
getMsgText().getText();
String s =
"�: " + df.format(new Date()) + "\n" + msg;
content =
content + s + "\n";
getContentText().setText(content.trim());
getMsgText().setText("");
try {
PrintStream
ps = new PrintStream(socket.getOutputStream());
ps.println(msg);
} catch
(UnknownHostException e1) {
e1.printStackTrace();
} catch
(IOException e1) {
e1.printStackTrace();
}
} else if
(e.getActionCommand().equals("Cancel")) {
System.exit(0);
}
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException
e) {
e.printStackTrace();
} catch (InstantiationException
e) {
e.printStackTrace();
} catch (IllegalAccessException
e) {
e.printStackTrace();
} catch
(UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
Client c = new Client();
c.accept();
}
public void accept(){
try {
while (true)
{
BufferedReader
br = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
char[]
msg = new char[1024];
String
msgs = "";
while
(br.read(msg) != -1) {
msgs
= new String(msg);
if
(msgs != null) {
content
+= ": " + df.format(new Date()) + "\n"
+
msgs.trim() + "\n";
getContentText().setText(content);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.服务器端
package com.server;
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.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import com.client.Client;
import com.ui.ChatUI;
public class Server extends ChatUI implements ActionListener
{
private String content = "";
ServerSocket server;
Socket socket;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss");
public Server() {
super("服务器");
getSendBtn().addActionListener(this);
getCancelBtn().addActionListener(this);
try {
server = new
ServerSocket(1234);
while (true)
{
socket
= server.accept();
ServerThread
s = new ServerThread(socket, getContentText());
new
Thread(s).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException
e) {
e.printStackTrace();
} catch (InstantiationException
e) {
e.printStackTrace();
} catch (IllegalAccessException
e) {
e.printStackTrace();
} catch
(UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
new Server();
// s.accept();
}
public void actionPerformed(ActionEvent e)
{
if
(e.getActionCommand().equals("Send")) {
String msg =
getMsgText().getText();
String s =
"服务器:" + df.format(new Date()) + "\n";
content += s
+ msg + "\n";
getContentText().setText(content);
getMsgText().setText("");
try {
PrintStream
ps = new PrintStream(socket.getOutputStream());
ps.println(msg);
} catch
(IOException e1) {
e1.printStackTrace();
}
} else if
(e.getActionCommand().equals("Cancel")) {
System.exit(0);
}
}
public void accept() {
try {
while (true)
{
BufferedReader
br = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
char[]
msg = new char[1024];
String
msgs = "";
while
(br.read(msg) != -1) {
msgs
= new String(msg);
if
(msgs != null) {
content
+= "客户端: " + df.format(new Date()) + "\n"
+
msgs.trim() + "\n";
getContentText().setText(content);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.服务器端线程
package com.server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JTextArea;
public class ServerThread implements Runnable {
Socket socket;
JTextArea contentText;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss");
String content;
public ServerThread(Socket socket, JTextArea
contentText) {
this.socket = socket;
this.contentText =
contentText;
}
public void run() {
try {
while (true)
{
BufferedReader
br = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
char[]
msg = new char[1024];
String
msgs = "";
while
(br.read(msg) != -1) {
msgs
= new String(msg);
if
(msgs != null) {
content
+= "客户端: " + df.format(new Date()) + "\n"
+
msgs.trim() + "\n";
contentText.setText(content);
System.out.println(content);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
4.界面
package com.ui;
import java.awt.Adjustable;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.ScrollPane;
import javax.naming.Context;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JViewport;
import javax.swing.WindowConstants;
public class ChatUI extends JFrame {
private JTextArea contentText, msgText;
private JButton sendBtn, cancelBtn;
public ChatUI(String title) {
super(title);
setLayout(new
BorderLayout());
setVisible(true);
setBounds(250, 150, 530,
450);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// �����¼���
JPanel conentPanel = new
JPanel();
ScrollPane scroll = new
ScrollPane();
scroll.setWheelScrollingEnabled(true);
scroll.setSize(470, 300);
contentText = new JTextArea(12,
40);
contentText.setLineWrap(true);
// JViewport jv = new
JViewport();
// jv.setViewPosition(new
Point(conentPanel.getX(),conentPanel.getY()+500));
// scroll.setViewport(jv);
scroll.add(contentText);
conentPanel.add(scroll);
// ��Ϣ���
JPanel msgPanel = new
JPanel();
ScrollPane scrollMsgPanel = new
ScrollPane();
scroll.setWheelScrollingEnabled(true);
scrollMsgPanel.setSize(470,
70);
msgText = new JTextArea(3,
40);
msgText.setLineWrap(true);
scrollMsgPanel.add(msgText);
msgPanel.add(scrollMsgPanel);
// ��ť���
JPanel btnPanel = new
JPanel();
sendBtn = new
JButton("Send");
cancelBtn = new
JButton("Cancel");
btnPanel.add(sendBtn);
btnPanel.add(cancelBtn);
getContentPane().add(conentPanel,
BorderLayout.NORTH);
getContentPane().add(msgPanel,
BorderLayout.CENTER);
getContentPane().add(btnPanel,
BorderLayout.SOUTH);
}
public JButton getCancelBtn() {
return cancelBtn;
}
public void setCancelBtn(JButton cancelBtn)
{
this.cancelBtn =
cancelBtn;
}
public JTextArea getContentText() {
return contentText;
}
public void setContentText(JTextArea
contentText) {
this.contentText =
contentText;
}
public JTextArea getMsgText() {
return msgText;
}
public void setMsgText(JTextArea msgText)
{
this.msgText = msgText;
}
public JButton getSendBtn() {
return sendBtn;
}
public void setSendBtn(JButton sendBtn)
{
this.sendBtn = sendBtn;
}
}