자바 간단 한 랜 채 팅 실현

15565 단어 자바채 팅 방
본 논문 의 사례 는 자바 가 간단 한 랜 채 팅 방 을 실현 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
자바 의 Socket 프로 그래 밍:
1.TCP 프로 토 콜 은 연결 되 고 신뢰 할 수 있 으 며 질서 가 있 으 며 바이트 흐름 으로 데 이 터 를 보 내 고 세 번 의 악수 방식 으로 연결 을 구축 하여 데 이 터 를 전송 하 는 통 로 를 형성 하 며 연결 에서 대량의 데 이 터 를 전송 하면 효율 이 약간 떨어진다.
2.자바 에서 TCP 프로 토 콜 을 바탕 으로 네트워크 통신 을 실현 하 는 클래스
클 라 이언 트 의 Socket 류서버 쪽 의 ServerSocket 류
3.Socket 통신 의 절차
① ServerSocket 과 Socket 만 들 기
② Socket 에 연 결 된 입 출력 흐름 열기
③ 협의 에 따라 Socket 에 대해 읽 기/쓰기 작업 을 한다.
④ 입 출력 흐름 닫 기,소켓 닫 기
4.서버 쪽:
① ServerSocket 대상 을 만 들 고 감청 포트 를 연결 합 니 다.
② accept()방법 으로 클 라 이언 트 요청 을 감청
③ 연결 이 이 루어 진 후 입력 흐름 을 통 해 클 라 이언 트 가 보 낸 요청 정 보 를 읽 습 니 다.
④ 수출 흐름 을 통 해 클 라 이언 트 에 게 향 음 정 보 를 보낸다.
⑤ 관련 자원 닫 기
5.클 라 이언 트:
① 소켓 대상 을 만 들 고 연결 할 서버 의 주소 와 포트 번 호 를 표시 합 니 다.
② 연결 후 출력 스 트림 을 통 해 서버 측 에 요청 메 시 지 를 보 냅 니 다.
③ 입력 흐름 을 통 해 서버 응답 정 보 를 가 져 옵 니 다.
④ 응답 자원 닫 기 
실 현 된 채 팅 방 예:
실현 효 과 는 다음 과 같다.

서버 코드:

package socket.server;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
 
/**
 * @author  
 * Create by fengc on  2018/7/25 21:21
 */
public class Server extends Thread{
 
    ServerUI ui;
    ServerSocket ss;
    BufferedReader reader;
    PrintWriter writer;
 
    public Server(ServerUI ui) {
        this.ui = ui;
        this.start();
    }
 
    @Override
    public void run() {
        try {
            ss = new ServerSocket(8081);
            ui.clients=new ArrayList<>();
            println("       :  8081");
            while (true) {
                println("       .......................................");
                Socket client = ss.accept();
                ui.clients.add(client);
                println("    ,             :" + client.toString());
                new ListenerClient(ui, client);
            }
        } catch (IOException e) {
            println("       :  8081");
            println(e.toString());
            e.printStackTrace();
        }
 
    }
 
    public synchronized void sendMsg(String msg) {
        try {
            for (int i = 0; i < ui.clients.size(); i++) {
                Socket client = ui.clients.get(i);
                writer = new PrintWriter(client.getOutputStream(), true);
                writer.println(msg);
            }
        } catch (Exception e) {
            println(e.toString());
        }
    }
 
    public void println(String s) {
        if (s != null) {
            s = "       :" + s;
            this.ui.taShow.setText(this.ui.taShow.getText() + s + "
"); System.out.println(s + "
"); } } public void closeServer() { try { if (ss != null) ss.close(); if (reader != null) reader.close(); if (writer != null) writer.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

package socket.server;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
 
/**
 * @author  
 * Create by fengc on  2018/7/25 21:33
 *                   *
 */
public class ListenerClient extends Thread{
 
    BufferedReader reader;
    PrintWriter writer;
    ServerUI ui;
    Socket client;
 
    public ListenerClient(ServerUI ui, Socket client) {
        this.ui = ui;
        this.client=client;
        this.start();
    }
 
    //                 ,         
    @Override
    public void run() {
        String msg = "";
        while (true) {
            try {
                reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
                writer = new PrintWriter(client.getOutputStream(), true);
                msg = reader.readLine();
                sendMsg(msg);
            } catch (IOException e) {
                println(e.toString());
                break;
            }
            if (msg != null && msg.trim() != "") {
                println("    " + msg);
            }
        }
    }
 
    //          
    public synchronized void sendMsg(String msg) {
        try {
            for (int i = 0; i < ui.clients.size(); i++) {
                Socket client = ui.clients.get(i);
                writer = new PrintWriter(client.getOutputStream(), true);
                writer.println(msg);
            }
 
        } catch (Exception e) {
            println(e.toString());
        }
    }
 
    public void println(String s) {
        if (s != null) {
            this.ui.taShow.setText(this.ui.taShow.getText() + s + "
"); System.out.println(s + "
"); } } }

package socket.server;
 
import javax.swing.*;
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.net.Socket;
import java.util.List;
 
/**
 * @author  
 * Create by fengc on  2018/7/25 21:21
 */
public class ServerUI extends JFrame {
 
    public static void main(String[] args) {
        new ServerUI();
    }
 
    public JButton btStart;//     
    public JButton btSend;//      
    public JTextField tfSend;//         
 
    public JTextArea taShow;//    
    public Server server;//         
    static List<Socket> clients;//            
 
    public ServerUI() {
        super("    ");
        btStart = new JButton("    ");
        btSend = new JButton("    ");
        tfSend = new JTextField(10); //      
        taShow = new JTextArea();
        //    ,      ,     
        btStart.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                server = new Server(ServerUI.this);
            }
        });
        //        
        btSend.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                server.sendMsg(tfSend.getText());
                tfSend.setText("");
            }
        });
        //     
        this.addWindowListener(new WindowAdapter() {
            //        
            public void windowClosing(WindowEvent e) {
                int a = JOptionPane.showConfirmDialog(null, "     ?", "    ",
                        JOptionPane.YES_NO_OPTION);
                if (a == 1) {
                    server.closeServer();
                    System.exit(0); //   
                }
            }
        });
        //               
        JPanel top = new JPanel(new FlowLayout());
        top.add(tfSend);
        top.add(btSend);
        top.add(btStart);
        this.add(top, BorderLayout.SOUTH);
        //             
        final JScrollPane sp = new JScrollPane();
        sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        sp.setViewportView(this.taShow);
        this.taShow.setEditable(false);
        this.add(sp, BorderLayout.CENTER);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(400, 300);
        this.setLocation(100, 200);
        this.setVisible(true);
    }
 
 
}
클 라 이언 트 코드:

package socket.clinet;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
 
/**
 * @author  
 * Create by fengc on  2018/7/25 21:41
 */
public class Client extends Thread {
 
    ClientUI ui;
    Socket client;
    BufferedReader reader;
    PrintWriter writer;
 
    public Client(ClientUI ui) {
        this.ui = ui;
        try {
            String ip = ui.tfIP.getText(); //     ip  
            int port = Integer.parseInt(ui.tfPort.getText()); //       
            client = new Socket(ip, port);//           IP   
            println("       ,       :" + port);
            reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
            writer = new PrintWriter(client.getOutputStream(), true);
            String name = ui.tfName.getText();
            if (name == null || "".equals(name)) {
                name = "   ";
            }
            sendMsg("   " + name + ",     ........................");
            //     true,  println、printf   format           
        } catch (NumberFormatException nu) {
            println("       .......");
            nu.printStackTrace();
        } catch (IOException e) {
            println("       :      IP     ");
            println(e.toString());
            e.printStackTrace();
        }
        this.start();
    }
 
    public void run() {
        String msg = "";
        while (true) {
            try {
                msg = reader.readLine();
            } catch (IOException e) {
                println("       ");
 
                break;
            }
            if (msg != null && msg.trim() != "") {
                println(msg);
            }
        }
    }
 
    public void sendMsg(String msg) {
        try {
            writer.println(msg);
        } catch (Exception e) {
            println(e.toString());
        }
    }
 
    public void println(String s) {
        if (s != null) {
            this.ui.taShow.setText(this.ui.taShow.getText() + s + "
"); System.out.println(s + "
"); } } }

package socket.clinet;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
 
/**
 * @author  
 * Create by fengc on  2018/7/25 21:40
 */
public class ClientUI extends JFrame {
 
    public static void main(String[] args) {
        new ClientUI();
    }
 
    public     JButton btStart;
    public     JButton btSend;
    public     JTextField tfSend; //      
    public     JTextPane  nameText; //    
    public     JTextPane  ipTex; //    
    public     JTextPane  portText; //    
    public     JTextField tfName; //   ip
    public     JTextField tfIP; //   ip
    public     JTextField tfPort; //     
    public     JTextArea taShow;
    public     Client server;
 
    public ClientUI() {
        super("   ");
        btStart = new JButton("    ");
        btSend = new JButton("    ");
        tfSend = new JTextField(20);
        tfIP = new JTextField(8);
        tfPort = new JTextField(3);
        tfName = new JTextField(6);
        nameText = new JTextPane();nameText.setText("   ");nameText.setEditable(false);
        ipTex = new JTextPane();ipTex.setText("    ");ipTex.setEditable(false);
        portText = new JTextPane();portText.setText("    ");portText.setEditable(false);
        taShow = new JTextArea();
        //        
        btStart.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                server = new Client(ClientUI.this);
            }
        });
        //      
        btSend.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String name = tfName.getText();
                if (name == null || "".equals(name)) {
                    name = "   ";
                }
                server.sendMsg(name + ":" + tfSend.getText());
                tfSend.setText("");
            }
        });
 
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                int a = JOptionPane.showConfirmDialog(null, "     ?", "    ",
                        JOptionPane.YES_NO_OPTION);
                if (a == 1) {
                    System.exit(0); //   
                }
            }
        });
        //             
        JPanel top = new JPanel(new FlowLayout());
        top.add(tfSend); //    
        top.add(btSend); //    
        this.add(top, BorderLayout.SOUTH); //     
 
        //        
        JPanel northJpannel = new JPanel(new FlowLayout());
        northJpannel.add(nameText);
        northJpannel.add(tfName);
        northJpannel.add(ipTex);
        northJpannel.add(tfIP);
        northJpannel.add(portText);
        northJpannel.add(tfPort);
        northJpannel.add(btStart);
        this.add(northJpannel,BorderLayout.NORTH);  //     
 
        final JScrollPane sp = new JScrollPane();
        sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        sp.setViewportView(this.taShow);
        this.taShow.setEditable(false);
        this.add(sp, BorderLayout.CENTER);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(500, 400);
        this.setLocation(600, 200);
        this.setVisible(true);
    }
 
 
 
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기