package ch16.unit02;
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;
public class ServerChat 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 ServerChat() {
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, 500);
setResizable(false);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == tf) {
String s = tf.getText().trim();
if (s.length() == 0) {
return;
}
try {
if (sc != null) {
PrintStream out = new PrintStream(sc.getOutputStream());
out.println("์๋ฒ->" + s);
out.flush();
ta.append("๋->" + s + "\n");
tf.setText("");
tf.requestFocus();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
public static void main(String[] args) {
ServerChat serverChat = new ServerChat();
serverChat.serverStart();
}
public void serverStart() {
try {
ss = new ServerSocket(port);
ta.setText("์๋ฒ ์์\n");
sc = ss.accept();
Thread t = new Thread(this);
t.start();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
String str;
String ip = null;
try {
BufferedReader br = new BufferedReader(new InputStreamReader(sc.getInputStream()));
ip = sc.getInetAddress().getHostAddress();
ta.append("[" + ip + "] ์ ์\n");
while ((str = br.readLine()) != null) {
ta.append(str + "\n");
ta.setCaretPosition(ta.getDocument().getLength());
}
} catch (IOException e) {
str = "[" + ip + "] ๋์ด ํด์ฅ ํ์ต๋๋ค.";
ta.append(str + "\n");
sc = null;
}
}
}
package ch16.unit02;
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 java.util.Vector;
//1:๋ค ์ฑํ
public class ServerChat2 {
private Vector<Socket> client=new Vector<Socket>();
private ServerSocket ss=null;
private int port=8000;
public ServerChat2() {
}
// ๋ด๋ถ ํด๋์ค
class WorkerThread extends Thread{
private Socket sc=null;
public WorkerThread(Socket sc) {
this.sc=sc; // ์ ์ํ ํด๋ผ์ด์ธํธ๋ฅผ ๋ํ๋
}
//๋ค๋ฅธ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฉ์์ง ์ ๋ฌ
public void sendMsg(String msg) {
for(Socket s:client) {
try {
if(s==sc) {
continue;
}
//๋ค๋ฅธ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฉ์์ง ์ ๋ฌ
PrintStream ps=new PrintStream(s.getOutputStream());
ps.println(msg);
} catch (Exception e) {
}
}
}
@Override
public void run() {
String ip=null;
String msg=null;
try {
//์ ์ํ ํด๋ผ์ด์ธํธ์ ์
๋ ฅ ์คํธ๋ฆผ(์์ ์ฉ)
BufferedReader br=new BufferedReader(new InputStreamReader(sc.getInputStream()));
ip=sc.getInetAddress().getHostAddress();
//ํด๋ผ์ด์ธํธ์ ์์ผ์ ๋ฐฑํฐ์ ์ ์ฅ
client.add(sc);
//๋ค๋ฅธ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ ์ฌ์ค์ ์๋ฆผ
msg="["+ip+"]์
์ฅ..ServerChat2.";
sendMsg(msg);
System.out.println(msg);
//ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ์ ๋ณด ๋ฐ๊ธฐ
while((msg=br.readLine())!=null) {
//๋ค๋ฅธ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ก
sendMsg(msg);
}
} catch (IOException e) {
//ํด๋ผ์ด์ธํธ๊ฐ ์ ์์ ํด์ ํ ๊ฒฝ์ฐ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์๊ฒ ํด์ ์ฌ์ค์ ์๋ฆผ
msg ="["+ip+"] ํด์ฅ~~~~~";
sendMsg(msg);
//๋ฐฑํฐ์์ ์ ์ ํด์ ํ ์์ผ ์ญ์
client.remove(sc);
sc=null;
System.out.println(msg);
}
super.run();
}
}
public void serverStart() {
try {
ss=new ServerSocket(port);
System.out.println("์๋ฒ ์์!!!");
while(true) {
//ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆผ
Socket sc=ss.accept();
//์ค๋ ๋ ๊ฐ์ฒด ์์ฑ
WorkerThread t=new WorkerThread(sc);
t.start(); // ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ ๊ฐฏ์ ๋งํผ ์์ฑ
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ServerChat2 obj =new ServerChat2(); // ์๋ฒ์ ๊ฐ์ฒด ์์ฑ
obj.serverStart(); // serverStart ์คํ
}
}
package ch16.unit02;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class ClientChat extends JFrame implements ActionListener, Runnable {
private static final long serialVersionUID = 1L;
private JTextField tf = new JTextField();
private JTextArea ta = new JTextArea();
private Socket sc = null;
private String host = "127.0.0.1";
//private String host = "192.168.0.93";
private int prot = 8000;
private String nickname = "์ ";
public ClientChat() {
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, 500);
setResizable(false);
setVisible(true);
}
@Override
public void run() {
String s;
try {
if(sc==null) {
return;
}
BufferedReader br=new BufferedReader(new InputStreamReader(sc.getInputStream()));
while((s=br.readLine())!=null) {
ta.append(s+"\n");
ta.setCaretPosition(ta.getDocument().getLength());
}
} catch (Exception e) {
ta.append("์๋ฒ๊ฐ ์ข
๋ฃ๋์์ต๋๋ค.\n");
sc=null;
}
}
@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 ps=new PrintStream(sc.getOutputStream());
ps.println(nickname + ">" +s);
ta.append("๋ณด๋>" + s + "\n");
ta.setCaretPosition(ta.getDocument().getLength());
tf.setText("");
tf.requestFocus();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
public void connect() {
try {
sc = new Socket(host, prot);
ta.setText("์๋ฒ ์ ์ ์๋ฃ...\n");
Thread t = new Thread(this);
t.start();
} catch (Exception e) {
sc = null;
e.printStackTrace();
}
}
public static void main(String[] args) {
new ClientChat().connect();
;
}
}
'๐ป > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
(39) [JAVA] 23์ผ (1) | 2024.04.10 |
---|---|
(36-37) [JAVA] 20-21์ผ (0) | 2024.04.10 |
(35) [JAVA] 19์ผ (1) | 2024.04.10 |
(34) [JAVA] 18์ผ ์ ์ถ๋ ฅ ์คํธ๋ฆผ(I/O Stream) - 2 (0) | 2024.04.03 |
(33) [JAVA] 18์ผ ์ ์ถ๋ ฅ ์คํธ๋ฆผ(I/O Stream) (0) | 2024.04.03 |