java Swing写的一个小Demo
Server
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.ArrayList;
import java.util.List;
public class Server {
static Boolean start = true;
List<Client> clients = new ArrayList<Client>();
public static void main(String[] args) {
new Server().start();
}
public void start() {
Socket s = null;
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(8888);
while (start) {
s = serverSocket.accept();
Client client = new Client(s);
new Thread(client).start();
clients.add(client);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class Client implements Runnable {
private Socket socket;
private BufferedReader br;
private PrintWriter pWriter;
private String mes;
public Client(Socket socket) {
this.socket = socket;
try {
this.br = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
this.pWriter = new PrintWriter(socket.getOutputStream(),true);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
try{
while (start) {
while((mes=br.readLine())!=null){
System.out.println(mes);
for (int i = 0; i < clients.size(); i++) {
if(!this.equals(clients.get(i)))
clients.get(i).pWriter.println(mes);
}
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
if (br!=null) {
br.close();
}
if(socket!=null){
socket.close();
}
if(this!=null){
clients.remove(this);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
Client
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JLabel;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
public class ChatClient extends JFrame {
JTextArea textArea;
Socket socket;
OutputStream oStream;
PrintWriter pWriter;
private JTextField textField;
private boolean start;
private BufferedReader bReader;
public ChatClient() {
getContentPane().setLayout(null);
textArea = new JTextArea();
textArea.setEditable(false);
textArea.setBounds(10, 58, 414, 309);
getContentPane().add(textArea);
textField = new JTextField();
textField.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyChar() == KeyEvent.VK_ENTER) {
String string = textField.getText();
if (!string.equals("")) {
textArea.append(string + "\n");
textField.setText("");
pWriter.println(string);
}
}
}
});
textField.setBounds(10, 377, 414, 21);
getContentPane().add(textField);
textField.setColumns(10);
JLabel userName = new JLabel("userName");
userName.setBounds(34, 33, 61, 15);
getContentPane().add(userName);
this.setSize(452, 446);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
disconnect();
System.exit(0);
}
});
new Thread() {
String mesString;
boolean start = true;
@Override
public void run() {
try {
connect();
while (start) {
while ((mesString = bReader.readLine()) != null) {
textArea.append(mesString + "\n");
}
}
} catch (SocketException e1) {
} catch (IOException e) {
e.printStackTrace();
}
};
}.start();
}
public void connect() {
try {
socket = new Socket("127.0.0.1", 8888);
oStream = socket.getOutputStream();
pWriter = new PrintWriter(oStream, true);
bReader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void disconnect() {
try {
if (pWriter != null) {
pWriter.close();
}
if (bReader != null) {
bReader.close();
}
if (socket != null) {
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ChatClient();
}
}