通过服务器实现客户端的相互通话。(需要导入jar包)论保存的重要性

来源:互联网 发布:python适合初学者的书 编辑:程序博客网 时间:2024/06/06 20:32

  • MyClient程序
  • MyClientRead
  • MyServer
  • MyServer
  • MyServerRead

难点,重点为以Json样式去发送数据,服务器接收到后对其进行解析,判断其样式,然后分类向其他客户端发送

MyClient程序

import java.awt.BorderLayout;import java.awt.Component;import java.awt.EventQueue;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import net.sf.json.JSONObject;import javax.swing.DefaultListModel;import javax.swing.JButton;import javax.swing.JTextArea;import javax.swing.JList;import javax.swing.JLabel;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.Socket;import java.net.UnknownHostException;import java.util.Calendar;import java.util.Date;import java.awt.event.ActionEvent;import javax.swing.JScrollBar;import javax.swing.JScrollPane;public class MyClient extends JFrame {    /**     * 将变量设定为全局变量,方便在各处的调用     */    private JPanel contentPane;    private Socket socket;    private DefaultListModel<String> modle;    private JTextArea textArea;    private JList list;    private boolean isRunning = true;    public boolean isRunning() {        return isRunning;    }    /**     * Launch the application.     */    public static void main(String[] args) {        EventQueue.invokeLater(new Runnable() {            public void run() {                try {                    MyClient frame = new MyClient();                    frame.setVisible(true);                } catch (Exception e) {                    e.printStackTrace();                }            }        });    }    /**     * Create the frame.     */    public MyClient() {        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        setBounds(100, 100, 597, 477);        contentPane = new JPanel();        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));        setContentPane(contentPane);        JButton btnNewButton = new JButton("连接服务器");        btnNewButton.setBounds(461, 59, 93, 48);        btnNewButton.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                System.out.println("连接服务器");                try {                    // 客户端连接服务器程序                    socket = new Socket("192.168.0.31", 8080);                    System.out.println("连接服务器成功");                    // 调用线程进行接收                    Thread t = new Thread(new MyClientRead(MyClient.this));                    // 开始线程                    t.start();                } catch (UnknownHostException e1) {                    // TODO Auto-generated catch block                    e1.printStackTrace();                } catch (IOException e1) {                    // TODO Auto-generated catch block                    e1.printStackTrace();                }            }        });        contentPane.setLayout(null);        contentPane.add(btnNewButton);        JButton btnNewButton_1 = new JButton("发送");        btnNewButton_1.setBounds(461, 324, 93, 23);        btnNewButton_1.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent arg0) {                // 按钮点击事件,点击后将写入内容传出                write("");                // JsonObie            }        });        contentPane.add(btnNewButton_1);        textArea = new JTextArea();        textArea.setBounds(10, 293, 442, 105);        textArea.addKeyListener(new KeyListener() {            @Override            public void keyPressed(KeyEvent e) { // 按键被按下时被触发                // 获得描述keyCode的标签                String keyText = KeyEvent.getKeyText(e.getKeyCode());                if (e.isActionKey()) { // 判断按下的是否为动作键                    System.out.println(keyText + "  ");                    System.out.println("您按下的是动作键“" + keyText + "”");                } else {                    System.out.print("您按下的是非动作键“" + keyText + "”");                    // 获得与此事件中的键相关联的字符                    int keyCode = e.getKeyCode();                    switch (keyCode) {                    case KeyEvent.VK_ENTER: // 判断按下的是否为Ctrl键                        write("");                        break;                    case KeyEvent.VK_ALT: // 判断按下的是否为Alt键                        System.out.print(",Alt键被按下");                        break;                    case KeyEvent.VK_SHIFT: // 判断按下的是否为Shift键                        System.out.print(",Shift键被按下");                        break;                    }                    System.out.println();                }            }            public void keyTyped(KeyEvent e) { // 发生击键事件时被触发                // 获得输入的字符                System.out.println("此次输入的是“" + e.getKeyChar() + "”");            }            public void keyReleased(KeyEvent e) { // 按键被释放时被触发                // 获得描述keyCode的标签                String keyText = KeyEvent.getKeyText(e.getKeyCode());                System.out.println("您释放的是“" + keyText + "”键");                System.out.println();            }        });        // JScrollPane scrollPane = new JScrollPane(myList);        contentPane.add(textArea);        list = new JList();        list.setBounds(1, 1, 439, 230);        modle = new DefaultListModel<>();        list.setModel(modle);        contentPane.add(list);        // 用list创建滚动条        JScrollPane scp = new JScrollPane(list);        scp.setBounds(10, 21, 441, 232);        contentPane.add(scp);        JLabel lblNewLabel = new JLabel("聊天记录");        lblNewLabel.setBounds(407, 263, 93, 15);        contentPane.add(lblNewLabel);        JButton btnNewButton_2 = new JButton("New button1");        btnNewButton_2.setBounds(461, 147, 93, 32);        btnNewButton_2.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {            }        });        contentPane.add(btnNewButton_2);        JButton btnNton = new JButton("停止接收");        btnNton.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                isRunning = false;            }        });        btnNton.setBounds(461, 219, 93, 23);        contentPane.add(btnNton);    }    public void read() {        try {            InputStream is = socket.getInputStream();            BufferedReader br = new BufferedReader(new InputStreamReader(is));            String line = br.readLine();            System.out.println();            // 创建JSON对象,传入json数据            System.out.println("123"+line);            JSONObject obj = JSONObject.fromObject(line);            // 得到key为"city"的对象的值            String type = obj.getString("type");            System.out.println("12345666544545");            if (type.equals("toClient")) {                String time = obj.getString("time");                String from = obj.getString("from");                String to = obj.getString("to");                String mesg = obj.getString("mesg");                String ip = obj.getString("ip");                // json 解析                // 加入所有内容,                modle.addElement(from + "to" + to + ":" + mesg);                System.out.println(line);            }        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    /**     * 发送到服务器     */    public void write(String words) {        try {        //创建输出流            OutputStream os = socket.getOutputStream();            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));            // 得到文本区的内容            words = textArea.getText().trim();            //将要发送的内容,打包成json文件发送            JSONObject jsonObject = new JSONObject();            Calendar rightNow = Calendar.getInstance();            long time = rightNow.getTimeInMillis();            jsonObject.put("type", "toClient");            jsonObject.put("to", "192.168.0.31");            jsonObject.put("from", "小白");            jsonObject.put("time", "" + time);            jsonObject.put("mesg", words);            //得到本机的地址,并将其发送出去            jsonObject.put("ip", socket.getInetAddress().getHostAddress());            // 将内容发送出去            bw.write(jsonObject + "\n");            // 在list添加内容            modle.addElement(words);            // 发送完后将文本区清空            textArea.setText("");            // write时封装            // 刷新缓冲区            bw.flush();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

MyClientRead

public class MyClientRead implements Runnable {    //用其他类创建新的对象,便于使用其他类中的方法,多线程时    //常用,便于传递方法。    private MyClient myClient;    //创建新的构造器,方便将值传入    public MyClientRead(MyClient myClient) {        this.myClient = myClient;    }    @Override    public void run() {        //线程一直在等待接收        while(myClient.isRunning()){            myClient.read();        }    }}

MyServer

import java.awt.BorderLayout;import java.awt.EventQueue;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.border.EmptyBorder;import net.sf.json.JSONObject;import javax.swing.DefaultListModel;import javax.swing.JButton;import javax.swing.JTextArea;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.awt.event.ActionEvent;import javax.swing.JList;public class MyServer extends JFrame {    // 将变量定义为全局变量,便于参数的传递    private JPanel contentPane;    private JTextArea textArea;    private boolean isRunning = true;    private JButton btnNewButton_2;    private DefaultListModel<String> modle;    private JButton button;    private HashMap<String, Socket> sockets;    private JList list;    public boolean isRunning() {        return isRunning;    }    // public boolean isSeRunning() {    // return isSeRunning;    // }    /**     * Launch the application.     */    public static void main(String[] args) {        EventQueue.invokeLater(new Runnable() {            public void run() {                try {                    MyServer frame = new MyServer();                    frame.setVisible(true);                } catch (Exception e) {                    e.printStackTrace();                }            }        });    }    /**     * Create the frame.     */    public MyServer() {        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        setBounds(100, 100, 610, 481);        contentPane = new JPanel();        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));        setContentPane(contentPane);        JButton btnNewButton = new JButton("开启服务器");        btnNewButton.setBounds(449, 21, 135, 55);        btnNewButton.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent arg0) {                // button的点击事件                isRunning = true;                new Thread(new Runnable() {                    @Override                    public void run() {                        try {                            // 创建服务器                            ServerSocket server = new ServerSocket(8080);                            System.out.println("服务器已经启动");                            // 使服务器接收客户端的连入                            sockets = new HashMap();                            while (isRunning) {                            //将连入的socket存入hashMap表                                Socket socket = server.accept();                                sockets.put(socket.getInetAddress().getHostAddress(), socket);                                // 创建新的线程                                Thread t = new Thread(new MyServerRead(MyServer.this, socket));                                t.start();                                System.out.println("有客户端连接");                            }                        } catch (IOException e) {                            // TODO Auto-generated catch block                            e.printStackTrace();                        }                    }                }).start();            }        });        contentPane.setLayout(null);        contentPane.add(btnNewButton);        textArea = new JTextArea();        textArea.setBounds(10, 258, 446, 155);        textArea.addKeyListener(new KeyListener() {            @Override            public void keyPressed(KeyEvent e) { // 按键被按下时被触发                // 获得描述keyCode的标签                String keyText = KeyEvent.getKeyText(e.getKeyCode());                if (e.isActionKey()) { // 判断按下的是否为动作键                    // System.out.println("您按下的是动作键“" + keyText + "”");                } else {                    // System.out.print("您按下的是非动作键“" + keyText + "”");                    // 获得与此事件中的键相关联的字符                    int keyCode = e.getKeyCode();                    switch (keyCode) {                    case KeyEvent.VK_ENTER: // 判断按下的是否为Ctrl键                        write();                        break;                    case KeyEvent.VK_ALT: // 判断按下的是否为Alt键                        System.out.print(",Alt键被按下");                        break;                    case KeyEvent.VK_SHIFT: // 判断按下的是否为Shift键                        System.out.print(",Shift键被按下");                        break;                    }                    System.out.println();                }            }            public void keyTyped(KeyEvent e) { // 发生击键事件时被触发                // 获得输入的字符                // System.out.println("此次输入的是“" + e.getKeyChar() + "”");            }            public void keyReleased(KeyEvent e) { // 按键被释放时被触发                // 获得描述keyCode的标签                String keyText = KeyEvent.getKeyText(e.getKeyCode());                // System.out.println("您释放的是“" + keyText + "”键");                System.out.println();            }        });        contentPane.add(textArea);        //发送按钮        btnNewButton_2 = new JButton("发送");        btnNewButton_2.setBounds(480, 336, 93, 23);        btnNewButton_2.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                write();            }        });        contentPane.add(btnNewButton_2);        button = new JButton("\u505C\u6B62\u63A5\u6536");        button.setBounds(480, 111, 93, 23);        button.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                isRunning = false;            }        });        contentPane.add(button);        list = new JList();        list.setBounds(10, 21, 440, 218);        modle = new DefaultListModel<>();        list.setModel(modle);        contentPane.add(list);        JScrollPane scp = new JScrollPane(list);        scp.setBounds(10, 21, 441, 232);        contentPane.add(scp);    }    public void read(Socket socket) {        if (socket.isConnected()) {            try {                InputStream is = socket.getInputStream();                BufferedReader br = new BufferedReader(new InputStreamReader(is));                // 获取传递过来的值,以每行读取                String str = br.readLine();                JSONObject obj = JSONObject.fromObject(str);                // 得到key为"type"的对象的值                String time = obj.getString("time");                String type = obj.getString("type");                // json 解析                // 加入所有内容,                if (type.equals("toClient")) {                    String from = obj.getString("from");                    String to = obj.getString("to");                    String mesg = obj.getString("mesg");                    String ip = obj.getString("ip");                    String time1 = obj.getString("time");                    Socket sock = sockets.get(to);                    /**                     * 对line进行解析,得到要发送的人                     */                    //modle.addElement(from + "to" + to + ":" + mesg);                    System.out.println("服务器接收到信息:" + str);                    new Thread(new Runnable() {                        @Override                        public void run() {                            try {                                OutputStream os = sock.getOutputStream();                                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));                                System.out.println("服务器发送信息:" + str);                                // JSONObject jsonObject = new JSONObject();                                // Calendar rightNow = Calendar.getInstance();                                // long time = rightNow.getTimeInMillis();                                //                                // jsonObject.put("type", "toClient");                                // jsonObject.put("to", to);                                // jsonObject.put("from", from);                                // jsonObject.put("time", time1);                                // jsonObject.put("mesg", mesg);                                // jsonObject.put("ip", ip);                                // 因为读入是以每行的形式,所以后面要加换行符                                //将信息写出                                bw.write(str + "\n");                                bw.flush();                                System.out.println("shuchuchenggong");                            } catch (IOException e) {                                // TODO Auto-generated catch block                                e.printStackTrace();                            }                        }                    }).start();                }            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        } else {            sockets.remove(socket);        }        // else remo    }    public void write() {        try {        //用set集合得到,HashMap的key            Set<String> map = sockets.keySet();            //用迭代器遍历set表            Iterator<String> it = map.iterator();            while (it.hasNext()) {                String key = it.next();                Socket socket = sockets.get(key);                OutputStream os = socket.getOutputStream();                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));                // 得到文本区的内容                String str = textArea.getText().trim();                System.out.println("服务器发送信息:" + str);                //也是以json的形式发出数据                JSONObject jsonObject = new JSONObject();                Calendar rightNow = Calendar.getInstance();                long time = rightNow.getTimeInMillis();                jsonObject.put("type", "toAll");                jsonObject.put("to", socket.getInetAddress().getHostAddress());                jsonObject.put("from", "小白");                jsonObject.put("time", "" + time);                jsonObject.put("mesg", str);                jsonObject.put("ip", socket.getInetAddress().getHostAddress());                // 因为读入是以每行的形式,所以后面要加换行符,将Json发送出去。                bw.write(jsonObject.toString() + "\n");                //将内容加到历史记录区                modle.addElement(str);                bw.flush();            }            // 发送后将文本区清空            textArea.setText("");        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

MyServer

import java.awt.BorderLayout;import java.awt.EventQueue;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.border.EmptyBorder;import net.sf.json.JSONObject;import javax.swing.DefaultListModel;import javax.swing.JButton;import javax.swing.JTextArea;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.awt.event.ActionEvent;import javax.swing.JList;public class MyServer extends JFrame {    // 将变量定义为全局变量,便于参数的传递    private JPanel contentPane;    private JTextArea textArea;    private boolean isRunning = true;    private JButton btnNewButton_2;    private DefaultListModel<String> modle;    private JButton button;    private HashMap<String, Socket> sockets;    private JList list;    public boolean isRunning() {        return isRunning;    }    // public boolean isSeRunning() {    // return isSeRunning;    // }    /**     * Launch the application.     */    public static void main(String[] args) {        EventQueue.invokeLater(new Runnable() {            public void run() {                try {                    MyServer frame = new MyServer();                    frame.setVisible(true);                } catch (Exception e) {                    e.printStackTrace();                }            }        });    }    /**     * Create the frame.     */    public MyServer() {        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        setBounds(100, 100, 610, 481);        contentPane = new JPanel();        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));        setContentPane(contentPane);        JButton btnNewButton = new JButton("开启服务器");        btnNewButton.setBounds(449, 21, 135, 55);        btnNewButton.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent arg0) {                // button的点击事件                isRunning = true;                new Thread(new Runnable() {                    @Override                    public void run() {                        try {                            // 创建服务器                            ServerSocket server = new ServerSocket(8080);                            System.out.println("服务器已经启动");                            // 使服务器接收客户端的连入                            sockets = new HashMap();                            while (isRunning) {                                Socket socket = server.accept();                                sockets.put(socket.getInetAddress().getHostAddress(), socket);                                // 创建新的线程                                Thread t = new Thread(new MyServerRead(MyServer.this, socket));                                t.start();                                System.out.println("有客户端连接");                            }                        } catch (IOException e) {                            // TODO Auto-generated catch block                            e.printStackTrace();                        }                    }                }).start();            }        });        contentPane.setLayout(null);        contentPane.add(btnNewButton);        textArea = new JTextArea();        textArea.setBounds(10, 258, 446, 155);        textArea.addKeyListener(new KeyListener() {            @Override            public void keyPressed(KeyEvent e) { // 按键被按下时被触发                // 获得描述keyCode的标签                String keyText = KeyEvent.getKeyText(e.getKeyCode());                if (e.isActionKey()) { // 判断按下的是否为动作键                    // System.out.println("您按下的是动作键“" + keyText + "”");                } else {                    // System.out.print("您按下的是非动作键“" + keyText + "”");                    // 获得与此事件中的键相关联的字符                    int keyCode = e.getKeyCode();                    switch (keyCode) {                    case KeyEvent.VK_ENTER: // 判断按下的是否为Ctrl键                        write();                        break;                    case KeyEvent.VK_ALT: // 判断按下的是否为Alt键                        System.out.print(",Alt键被按下");                        break;                    case KeyEvent.VK_SHIFT: // 判断按下的是否为Shift键                        System.out.print(",Shift键被按下");                        break;                    }                    System.out.println();                }            }            public void keyTyped(KeyEvent e) { // 发生击键事件时被触发                // 获得输入的字符                // System.out.println("此次输入的是“" + e.getKeyChar() + "”");            }            public void keyReleased(KeyEvent e) { // 按键被释放时被触发                // 获得描述keyCode的标签                String keyText = KeyEvent.getKeyText(e.getKeyCode());                // System.out.println("您释放的是“" + keyText + "”键");                System.out.println();            }        });        contentPane.add(textArea);        btnNewButton_2 = new JButton("发送");        btnNewButton_2.setBounds(480, 336, 93, 23);        btnNewButton_2.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                write();            }        });        contentPane.add(btnNewButton_2);        button = new JButton("\u505C\u6B62\u63A5\u6536");        button.setBounds(480, 111, 93, 23);        button.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                isRunning = false;            }        });        contentPane.add(button);        list = new JList();        list.setBounds(10, 21, 440, 218);        modle = new DefaultListModel<>();        list.setModel(modle);        contentPane.add(list);        JScrollPane scp = new JScrollPane(list);        scp.setBounds(10, 21, 441, 232);        contentPane.add(scp);    }    public void read(Socket socket) {        if (socket.isConnected()) {            try {                InputStream is = socket.getInputStream();                BufferedReader br = new BufferedReader(new InputStreamReader(is));                // 获取传递过来的值,以每行读取                String str = br.readLine();                JSONObject obj = JSONObject.fromObject(str);                // 得到key为"type"的对象的值                String time = obj.getString("time");                String type = obj.getString("type");                // json 解析                // 加入所有内容,                if (type.equals("toClient")) {                    String from = obj.getString("from");                    String to = obj.getString("to");                    String mesg = obj.getString("mesg");                    String ip = obj.getString("ip");                    String time1 = obj.getString("time");                    Socket sock = sockets.get(to);                    /**                     * 对line进行解析,得到要发送的人                     */                    //modle.addElement(from + "to" + to + ":" + mesg);                    System.out.println("服务器接收到信息:" + str);                    new Thread(new Runnable() {                        @Override                        public void run() {                            try {                                OutputStream os = sock.getOutputStream();                                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));                                System.out.println("服务器发送信息:" + str);                                // JSONObject jsonObject = new JSONObject();                                // Calendar rightNow = Calendar.getInstance();                                // long time = rightNow.getTimeInMillis();                                //                                // jsonObject.put("type", "toClient");                                // jsonObject.put("to", to);                                // jsonObject.put("from", from);                                // jsonObject.put("time", time1);                                // jsonObject.put("mesg", mesg);                                // jsonObject.put("ip", ip);                                // 因为读入是以每行的形式,所以后面要加换行符                                bw.write(str + "\n");                                bw.flush();                                System.out.println("shuchuchenggong");                            } catch (IOException e) {                                // TODO Auto-generated catch block                                e.printStackTrace();                            }                        }                    }).start();                }            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        } else {            sockets.remove(socket);        }        // else remo    }    public void write() {        try {            Set<String> map = sockets.keySet();            Iterator<String> it = map.iterator();            while (it.hasNext()) {                String key = it.next();                Socket socket = sockets.get(key);                OutputStream os = socket.getOutputStream();                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));                // 得到文本区的内容                String str = textArea.getText().trim();                System.out.println("服务器发送信息:" + str);                //创json,将数据按一定格式传出                JSONObject jsonObject = new JSONObject();                Calendar rightNow = Calendar.getInstance();                long time = rightNow.getTimeInMillis();                jsonObject.put("type", "toAll");                jsonObject.put("to", socket.getInetAddress().getHostAddress());                jsonObject.put("from", "小白");                jsonObject.put("time", "" + time);                jsonObject.put("mesg", str);                jsonObject.put("ip", socket.getInetAddress().getHostAddress());                // 因为读入是以每行的形式,所以后面要加换行符                bw.write(jsonObject.toString() + "\n");                modle.addElement(str);                bw.flush();            }            // 发送后将文本区清空            textArea.setText("");        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

MyServerRead

import java.net.Socket;public class MyServerRead implements Runnable {private MyServer myServer;private Socket socket;    public MyServerRead(MyServer myServer, Socket socket) {        this.myServer=myServer;        this.socket=socket;    }    @Override    public void run() {        //判断什么时候线程开始接收        while(myServer.isRunning()){            myServer.read(socket);        }    }}

通过服务器实现客户端的相互通话。(需要导入jar包)论保存的重要性

在接口上使用匿名内部类
interface Person {
public void eat();
}

public class Demo {
public static void main(String[] args) {
Person p = new Person() {
public void eat() {
System.out.println(“eat something”);
}
};
p.eat();
}
}
由上面的例子可以看出,只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现

最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 港行不支持电信卡怎么办 安卓导航不开机怎么办 鞭炮放一半不响怎么办 禁止鸣笛的地方鸣笛了怎么办 手被炮仗炸了怎么办 手被猴子抓伤了怎么办 炸东西剩的油怎么办 炸臭豆腐剩的油怎么办 油炸久了油发黑怎么办 炸鱼的时候粘锅怎么办 吃了葱蒜有味怎么办 哺乳期喝了抹茶怎么办 干炸小黄鱼凉了怎么办 烧鱼酱油放多了怎么办 夏天腿干燥起皮怎么办 螃蟹柿子同时吃了怎么办 柿子和螃蟹一起吃怎么办 螃蟹和柿子吃了怎么办 今天为什么很多网站打不开怎么办 网上报名人太多服务器卡怎么办 网站换了电脑打不开怎么办 感冒时后背发凉怎么办? 脚扭了脚背疼怎么办 五妙水仙膏干了怎么办 红苹果接不到任务了怎么办 我判刑了家里老母亲怎么办 离婚之前对方把财产转移怎么办 有人侵犯我的名誉权怎么办 耳朵被咬红肿了怎么办 孕29周呼吸困难怎么办 痔疮出血一个星期了怎么办 怀孕长了副乳该怎么办 备孕期间长痔疮怎么办 15年凌度智能钥匙全丢怎么办 西水开发商跑了怎么办 如果房子烂尾了怎么办 小斗鱼出生后喂年丰虾在缸底怎么办 脸上痘痘红肿痒怎么办 签证一定要写酒店地址怎么办 重庆的狗狗死了怎么办 村霸霸占土地该怎么办