服务器:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;public class MyServer extends JFrame{
ServerSocket serverSocket = null;
Socket s = null;
BufferedReader serverReader = null;
PrintWriter serverWriter = null;
ServerReaderThread srt = new ServerReaderThread();
ServerFindSocket sfs = new ServerFindSocket();
Thread sfsThread = null;
JTextArea jta = new JTextArea(20,10);
JTextField jt = new JTextField(20);
JButton button1 = new JButton("开始");
JButton button2= new JButton("发送");
JButton button3 = new JButton("清空");
JPanel panel1 = new JPanel();
public MyServer(){
setTitle("Server");
this.setSize(500, 400);
panel1.setLayout(new FlowLayout());
panel1.add(button1);
panel1.add(jt);
panel1.add(button2);
panel1.add(button3);
this.setLayout(new BorderLayout());
this.add(panel1,BorderLayout.SOUTH);
this.add(jta,BorderLayout.CENTER);
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
openServer();
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
sendMessage();
jt.setText("");
}
});
button3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
jta.setText("");
jt.setText("");
}
});
}
public void openServer(){
if(serverSocket == null){
try {
serverSocket = new ServerSocket(9000);
sfsThread = new Thread(sfs);
sfsThread.start();
} catch (Exception e) {
// TODO Auto-generated catch block
closeServer();
e.printStackTrace();
}
}
}
public void sendMessage(){
String temp = jt.getText();
if(temp.equals("")){
return ;
}else{
if(serverWriter != null){
serverWriter.println("服务器说: "+ temp);
jta.setText(jta.getText()+ "服务器说:" + jt.getText() + "\n");
serverWriter.flush();
}
}
}
//搜索客户端线程
class ServerFindSocket implements Runnable{ public void run() {
// TODO Auto-generated method stub
try {
s = serverSocket.accept();
serverReader = new BufferedReader(new InputStreamReader(s.getInputStream()));
serverWriter = new PrintWriter(new OutputStreamWriter(s.getOutputStream()),true);
Thread srThread = new Thread(srt);
srt.bCRT = true;
srThread.start();
} catch (Exception e) {
// TODO: handle exception
closeServer();
e.printStackTrace();
}
}
}
//从客户端读取线程
class ServerReaderThread implements Runnable{
public boolean bCRT = true;
String temp = "";
public void run() {
// TODO Auto-generated method stub
while(true){
try {
temp = serverReader.readLine();
if(temp == null){
closeServer();
return ;
}
} catch (Exception e) {
// TODO: handle exception
// TODO: handle exception
closeServer();
e.printStackTrace();
return ;
}
jta.setText(jta.getText()+temp+"\n");
}
}
}
public void closeServer(){
try {
if(serverSocket!=null)
serverSocket.close();
if(s!=null)
s.close();
if(serverReader!=null)
serverReader.close();
if(serverWriter!=null)
serverWriter.close();
} catch (Exception e) {
// TODO: handle exception
serverSocket = null;
s = null;
serverReader=null;
serverWriter = null;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MyServer frame = new MyServer();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;public class MyServer extends JFrame{
ServerSocket serverSocket = null;
Socket s = null;
BufferedReader serverReader = null;
PrintWriter serverWriter = null;
ServerReaderThread srt = new ServerReaderThread();
ServerFindSocket sfs = new ServerFindSocket();
Thread sfsThread = null;
JTextArea jta = new JTextArea(20,10);
JTextField jt = new JTextField(20);
JButton button1 = new JButton("开始");
JButton button2= new JButton("发送");
JButton button3 = new JButton("清空");
JPanel panel1 = new JPanel();
public MyServer(){
setTitle("Server");
this.setSize(500, 400);
panel1.setLayout(new FlowLayout());
panel1.add(button1);
panel1.add(jt);
panel1.add(button2);
panel1.add(button3);
this.setLayout(new BorderLayout());
this.add(panel1,BorderLayout.SOUTH);
this.add(jta,BorderLayout.CENTER);
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
openServer();
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
sendMessage();
jt.setText("");
}
});
button3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
jta.setText("");
jt.setText("");
}
});
}
public void openServer(){
if(serverSocket == null){
try {
serverSocket = new ServerSocket(9000);
sfsThread = new Thread(sfs);
sfsThread.start();
} catch (Exception e) {
// TODO Auto-generated catch block
closeServer();
e.printStackTrace();
}
}
}
public void sendMessage(){
String temp = jt.getText();
if(temp.equals("")){
return ;
}else{
if(serverWriter != null){
serverWriter.println("服务器说: "+ temp);
jta.setText(jta.getText()+ "服务器说:" + jt.getText() + "\n");
serverWriter.flush();
}
}
}
//搜索客户端线程
class ServerFindSocket implements Runnable{ public void run() {
// TODO Auto-generated method stub
try {
s = serverSocket.accept();
serverReader = new BufferedReader(new InputStreamReader(s.getInputStream()));
serverWriter = new PrintWriter(new OutputStreamWriter(s.getOutputStream()),true);
Thread srThread = new Thread(srt);
srt.bCRT = true;
srThread.start();
} catch (Exception e) {
// TODO: handle exception
closeServer();
e.printStackTrace();
}
}
}
//从客户端读取线程
class ServerReaderThread implements Runnable{
public boolean bCRT = true;
String temp = "";
public void run() {
// TODO Auto-generated method stub
while(true){
try {
temp = serverReader.readLine();
if(temp == null){
closeServer();
return ;
}
} catch (Exception e) {
// TODO: handle exception
// TODO: handle exception
closeServer();
e.printStackTrace();
return ;
}
jta.setText(jta.getText()+temp+"\n");
}
}
}
public void closeServer(){
try {
if(serverSocket!=null)
serverSocket.close();
if(s!=null)
s.close();
if(serverReader!=null)
serverReader.close();
if(serverWriter!=null)
serverWriter.close();
} catch (Exception e) {
// TODO: handle exception
serverSocket = null;
s = null;
serverReader=null;
serverWriter = null;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MyServer frame = new MyServer();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
import java.awt.BorderLayout;
import java.awt.FlowLayout;
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.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;public class MyClient extends JFrame{
Socket clientSocket = null;
BufferedReader clientReader = null;
PrintWriter clientWriter = null;
ClientReaderThread crt = new ClientReaderThread();
JTextArea jta = new JTextArea(20,10);
JTextField jt = new JTextField(20);
JButton button1 = new JButton("连接");
JButton button2= new JButton("发送");
JButton button3 = new JButton("清空");
JPanel panel1 = new JPanel();
public MyClient(){
setTitle("Client");
this.setSize(500, 400);
panel1.setLayout(new FlowLayout());
panel1.add(button1);
panel1.add(jt);
panel1.add(button2);
panel1.add(button3);
this.setLayout(new BorderLayout());
this.add(panel1,BorderLayout.SOUTH);
this.add(jta,BorderLayout.CENTER);
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
connectServer();
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
sendMessage();
jt.setText("");
}
});
button3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
jta.setText("");
jt.setText("");
}
});
}
public void connectServer(){
if(clientSocket == null){
try {
clientSocket = new Socket("127.0.0.1" , 9000);
clientReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
clientWriter = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream()),true);
Thread crThread = new Thread(crt);
crt.bCRT=true;
crThread.start();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void sendMessage(){
String temp = jt.getText();
if(temp.equals("")){
return ;
}else{
if(clientWriter != null){
clientWriter.println("客户端说: "+ temp);
jta.setText(jta.getText()+ "客户端说:" + jt.getText() + "\n");
clientWriter.flush();
}
}
}
public void closeServer(){
try {
if(clientSocket != null)
clientSocket.close();
if(clientReader!=null)
clientReader.close();
if(clientWriter != null)
clientReader.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
closeServer();
}
}
//客户端读取线程类
class ClientReaderThread implements Runnable{
public boolean bCRT = true;
String temp = "";
public void run() {
// TODO Auto-generated method stub
while(bCRT){
try {
temp = clientReader.readLine();
if(temp == null){
closeServer();
bCRT = false;
}
} catch (Exception e) {
// TODO: handle exception
closeServer();
e.printStackTrace();
bCRT = false;
}
jta.setText(jta.getText()+temp+"\n");
}
}
}
public static void main(String[] args) {
MyClient frame = new MyClient();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}}
我也写了一个 C/S模式 有界面,有在线列表,能保存聊天记录。这是面试作品,呵呵,做好后就直接进公司了
}