0907_Java : 채팅프로그램 만들기

0907_Java : 채팅프로그램 만들기

package netEx; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; // 1:1 채팅 public class ChatServer extends JFrame implements ActionListener, Runnable { private static final long serialVersionUID = 1L; private JTextField tf = new JTextField(); private JTextArea ta = new JTextArea(); private ServerSocket ss = null; private int port = 8000; private Socket sc = null; public ChatServer() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ta.setEditable(false); JScrollPane sp = new JScrollPane(ta); add(sp, BorderLayout.CENTER); tf.addActionListener(this); add(tf, BorderLayout.SOUTH); setTitle("채팅-서버"); setSize(500, 550); setVisible(true); tf.requestFocus(); } public void serverStart() { try { ss = new ServerSocket(port); ta.setText("서버 시작 !!!

"); sc = ss.accept(); // 클라이언트의 접속을 기다린다. // 클라이언트가 접속하면 클라이언트와 통신을 할 수 있는 Socket 객체를 반환 받는다. Thread t = new Thread(this); t.start(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { new ChatServer().serverStart(); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == tf) { String s = tf.getText().trim(); if (s.length() == 0) return; try { if (sc == null) { return; } // 클라이언트에게 정보를 전송 한다. PrintStream out = new PrintStream(sc.getOutputStream()); // OutputStream을 PrintStream으로 변환 out.println("서버] " + s); ta.append("보냄] " + s + "

"); ta.setCaretPosition(ta.getDocument().getLength());; tf.setText(""); tf.requestFocus(); // 포커스를 JTextField 에 } catch (IOException e2) { // e2.printStackTrace(); ta.append("클라이언트가 접속을 해제 했습니다.

"); sc = null; } } } @Override public void run() { String str; String ip = ""; if (sc == null) { return; } try { // 접속한 클라이언트가 보낸 정보를 입력 스트림으로 받는다. BufferedReader br = new BufferedReader(new InputStreamReader(sc.getInputStream())); // 접속한 클라이언트의 ip 주소 ip = sc.getInetAddress().getHostAddress(); ta.append("["+ip+"] 접속 ...

"); // 클라이언트가 보낸 정보를 받는다. while((str = br.readLine()) !=null ) { ta.append(str+"

"); ta.setCaretPosition(ta.getDocument().getLength());; } } catch (IOException e) { str = "["+ip+"] 접속 해제 !!!"; ta.append(str+"

"); sc = null; } } }

from http://development-writing.tistory.com/266 by ccl(S) rewrite - 2021-09-08 05:27:36