24小时热门版块排行榜    

CyRhmU.jpeg
南方科技大学公共卫生及应急管理学院2025级博士研究生招生报考通知
查看: 474  |  回复: 0

salaries

新虫 (初入文坛)

[交流] 聊天

package cn.javaqq;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class ServerFrame {
        private final static int PORT = 8888;
        private static boolean bconnected = false;

        private static ServerSocket socket = null;
        private static DataOutputStream output = null;
    static List<ClientThread> cl=new ArrayList<ClientThread>();
        public static void main(String[] args) {

                new ServerFrame().startServer();
        }

        public  void startServer() {
                ClientThread ct=null;
                try {
                        socket = new ServerSocket(PORT);
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                while (true) {
                        Socket so = null;
                        try {
                                so = socket.accept();
                                ct = new ClientThread(so);
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                       
                        cl.add(ct);
                        Thread th=new Thread(ct);
                        th.start();

                }

        }
        class ClientThread implements Runnable {
                private DataInputStream input = null;
                private DataOutputStream output=null;

                private Socket s = null;
                private boolean bconnected = false;
            
               
                public void send(String str1){
                        try {
                                output.writeUTF(str1);
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
                @Override
                public void run() {
                        // TODO Auto-generated method stub
                        bconnected = true;
                       
                       
                        while (bconnected) {
                                String str = null;
                                // 读
                                try {
                                        str = input.readUTF();
                                        for(int i=0;i<cl.size();i++){
                                                cl.get(i).send(str);
                                        }
                                } catch (Exception e) {
                                        // TODO Auto-generated catch block
                                        // e.printStackTrace();
                                        try {
                                                s.close();
                                        } catch (IOException e1) {
                                                // TODO Auto-generated catch block
                                                e1.printStackTrace();
                                        }
                                        try {
                                                input.close();
                                        } catch (IOException e1) {
                                                // TODO Auto-generated catch block
                                                e1.printStackTrace();
                                        }
                                        // System.out.println("出现错误!";
                                }
                                System.out.println(str);
                                // 写
                                // output.writeUTF(s1);
                                // output.flush();
                        }
                }

                public ClientThread(Socket soc) {
                        s = soc;
                        // 读从客户端发过来的数据流
                        try {
                                input = new DataInputStream(s.getInputStream());
                                output=new DataOutputStream(s.getOutputStream());
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
        }

}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package cn.javaqq;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class ClientFrame extends Frame {

        boolean clientread = false;
        static Socket client = null;
        // static TextArea area=null;
        static DataOutputStream output = null;
        TextField text = new TextField();
        Panel p = new Panel();

        TextArea area = new TextArea();
        TextArea area1 = new TextArea();
        Button btn1 = new Button("Connect";
        Button btn2 = new Button("Disconnect";

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                new ClientFrame().frameDemo();

        }

        public void frameDemo() {
                BorderLayout border = new BorderLayout();
                BorderLayout border1 = new BorderLayout();
                p.setLayout(border1);
                p.add(area, border.NORTH);
                p.add(area1, border.SOUTH);
                setLayout(border);
                this.add(p, border.NORTH);
                // add(area, border.NORTH);
                add(text, border.SOUTH);
                add(btn1, border.WEST);
                add(btn2, border.EAST);

                this.setLocation(300, 200);
                this.setSize(300, 400);
                pack();
                text.addActionListener(new TFListener());
                btn1.addActionListener(new BTListener());
                btn2.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                                try {
                                        ClientFrame.disConnected();
                                } catch (Exception e1) {
                                        // TODO Auto-generated catch block
                                        e1.printStackTrace();
                                }
                        }
                });
                this.setVisible(true);
                this.addWindowListener(new WindowAdapter() {
                        public void windowClosing(WindowEvent e) {
                                System.exit(0);
                        }
                });

        }

        public void connected() {
                try {

                        // ServerFrame.startServer();
                        client = new Socket("LocalHost", 8888);
                        System.out.println("connected!";

                        // clientread=true;

                } catch (UnknownHostException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }

        public static void disConnected() throws Exception {
                // ServerFrame.disConnectedServer();
                output.close();
                client.close();
        }

        private class TFListener implements ActionListener {

                @Override
                public void actionPerformed(ActionEvent e) {
                        // TODO Auto-generated method stub
                        String s = text.getText();
                        try {

                                output = new DataOutputStream(client.getOutputStream());
                                output.writeUTF(s);
                                output.flush();

                                try {
                                        ServerThread serverthread = new ServerThread(client);
                                        new Thread(serverthread).start();
                                } catch (Exception e1) {
                                        // TODO Auto-generated catch block
                                        e1.printStackTrace();
                                }

                                // output.close();
                        } catch (IOException e1) {
                                // TODO Auto-generated catch block
                                e1.printStackTrace();
                        } catch (NullPointerException e2) {
                                System.out.println("您还没有连接!";
                        }
                        area.setText(s);
                        text.setText("";
                }

        }

        private class BTListener implements ActionListener {

                @Override
                public void actionPerformed(ActionEvent e) {
                        // TODO Auto-generated method stub
                        new ClientFrame().connected();
                }

        }

        class ServerThread implements Runnable {
                Socket serversocket;
                DataInputStream clientinput = null;
                boolean start = false;
                String clientstring = null;

                @Override
                public void run() {
                        // TODO Auto-generated method stub
                        start = true;
                        while (start) {
                                try {
                                        clientinput = new DataInputStream(client.getInputStream());
                                } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                                try {
                                        clientstring = clientinput.readUTF();
                                } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                                area1.setText("收到服务器端发来数据:" + clientstring);

                        }
                }

                public ServerThread(Socket s) throws Exception {
                        serversocket = s;
                        clientinput = new DataInputStream(serversocket.getInputStream());
                }
        }
}
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 salaries 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见