客户端:
- import java.awt.*;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.WindowAdapter;
- import java.awt.event.WindowEvent;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.net.Socket;
- import java.net.SocketException;
- import java.net.UnknownHostException;
- public class Client extends Frame { //繼承Frame类
- TextField tf = new TextField(); //输入框对象
- TextArea ta = new TextArea(); //显示框对象
- Socket s = null;
- DataOutputStream dos = null;
- DataInputStream dis = null;
- boolean bConnected = false;
- recvThread r = new recvThread(); //线程类
- public static void main(String[] args) {
- new Client().creatFrame();
- }
- public void creatFrame() { //产生图形界面
- this.setBounds(300, 300, 300, 300);
- ta.setEditable(false);
- this.add(tf, BorderLayout.SOUTH);
- this.add(ta, BorderLayout.NORTH);
- this.addWindowListener(new WindowAdapter() { //响应关闭窗口事件
- public void windowClosing(WindowEvent e) {
- disconnect();
- System.exit(0);
- }
- });
- tf.addActionListener(new tfListener()); //响应输入事件
- this.pack();
- this.setVisible(true);
- connect();
- new Thread(r).start();
- }
- public void connect() {
- try {
- s = new Socket("127.0.0.1", 8888); //建立客户端对象
- dos = new DataOutputStream(s.getOutputStream());
- dis = new DataInputStream(s.getInputStream());
- bConnected = true;
- } catch (UnknownHostException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public void disconnect() { //窗口关闭时关闭客户端,输入,输出
- try {
- dos.close();
- dis.close();
- s.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- class tfListener implements ActionListener { //输入框实现的接口,响应输入事件
- public void actionPerformed(ActionEvent e) {
- String str = tf.getText();
- //ta.setText(str);
- tf.setText("");
- try {
- dos.writeUTF(str);
- dos.flush();
- //dos.close();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- }
- class recvThread implements Runnable { //客户端线程接收数据
- public void run() {
- try {
- while (bConnected) {
- String str;
- str = dis.readUTF(); //拿到数据
- ta.setText(ta.getText() + str + '/n');//显示到显示框中
- }
- } catch (SocketException e) {
- System.out.println("退出了");
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- }
- }
---------------------------------------------------------------------------------------------------------------------------------------
服务端:
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.EOFException;
- import java.io.IOException;
- import java.net.BindException;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.net.SocketException;
- import java.util.ArrayList;
- import java.util.List;
- public class Server {
- boolean started = false;
- ServerSocket ss = null;
- List<ChatClient> clients = new ArrayList<ChatClient>(); //保存客户端线程类
- public static void main(String[] args) {
- new Server().start();
- }
- void start() {
- try {
- ss = new ServerSocket(8888); //建立服务端对象
- started = true;
- } catch (BindException e) {
- System.out.println("端口使用中");
- } catch (IOException e) {
- e.printStackTrace();
- }
- try {
- while (started) {
- Socket s = ss.accept(); //接收客户端
- ChatClient c = new ChatClient(s);
- System.out.println("客戶端接收成功");
- new Thread(c).start(); //启动线程
- clients.add(c); //添加线程类
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- ss.close();
- } catch (IOException e) {
- // TODO 自动生成 catch 块
- e.printStackTrace();
- }
- }
- }
- class ChatClient implements Runnable { //建立客户端线程接收,发送数据
- private Socket s;
- DataInputStream dis = null;
- DataOutputStream dos = null;
- boolean bConnected = false;
- public ChatClient(Socket s) {
- this.s = s;
- try {
- dis = new DataInputStream(s.getInputStream());
- dos = new DataOutputStream(s.getOutputStream());
- bConnected = true;
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- void send(String str) {
- try {
- dos.writeUTF(str);
- } catch (SocketException e) {
- System.out.println("對方退出了");
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public void run() {
- try {
- while (bConnected) {
- String str = dis.readUTF();
- // System.out.println(str);
- for (int i = 0; i < clients.size(); i++) {
- ChatClient c = clients.get(i);
- c.send(str);
- }
- }
- } catch (EOFException e) {
- System.out.println("客戶端退出了");
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (dis != null)
- if (s != null)
- try {
- dis.close();
- s.close();
- dos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }