
Socketํต์
: ๋คํธ์ํฌ์์์ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ผ๋ก ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ๊ธฐ์
โ ํด๋ผ์ด์ธํธ <-> ์๋ฒ ๊ฐ ๋ฐ์ดํฐ ๊ตํ ๋ฐ ํต์ ๋ฐฉ๋ฒ
โก ์ผ๋ฐ์ ์ผ๋ก TCP / UDP ํ๋กํ ์ฝ ์ฌ์ฉ
โข ์น์๋ฒ / ์ฑํ / ์จ๋ผ์ธ ๊ฒ์ ๋ฑ์ ์ฌ์ฉ (์ฃผ๋ก ์์ผAPI & ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ๊ตฌํํจ)1) ์๋ฒ(Server) - ํน์ ํฌํธ์์ ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ ๊ธฐ๋ค๋ฆผ
2) ํด๋ผ์ด์ธํธ(Client) - ์๋ฒ ์ฐ๊ฒฐ ์๋ / ์ฐ๊ฒฐ ์ฑ๊ณต์ ์์ชฝ๊ฐ์ ํต์ ์ด๋ฃจ์ด์ง
3) ์๋ฒ <-> ํด๋ผ์ด์ธํธ (๋ฐ์ดํฐ ์ฃผ๊ณ ๋ฐ์)
4) ํต์ ๋๋๋ฉด ์ฐ๊ฒฐ ์ข ๋ฃ..
ํ๋กํ ์ฝ (Protocol)
๋คํธ์ํฌ ํต์ ์ ์ํ ํ๋กํ ์ฝ (์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ณ ํต์ ํ๋์ง์ ๋ํด)
TCP (Transmission Control Protocol)
โ ํต์ ํ๊ธฐ ์ ์ ์ฐ๊ฒฐ ์ค์ ํ ํต์ ์๋ฃ๋๋ฉด ์ฐ๊ฒฐํด์
โก ์์๋๋ก ๋ฐ์ดํฐ ์ ์ก / ๋ฐ์ดํฐ ์์ค๋๋ฉด ์ฌ์ ์ก ์์ฒญ (์ ๋ขฐ์ฑ ์ ์ง)
โข ์๋ ์กฐ์ ๊ฐ๋ฅ
โฃ (์ฐ๊ฒฐ์ ์ง๊ฐ ์ค์ํ) ํ์ผ์ ์ก / ์ด๋ฉ์ผ ์ ์ก / ์น ๋ธ๋ผ์ฐ์ง = ์ ๋ขฐ์ฑ ์ค์ํ ์์ฉํ๋ก๊ทธ๋จ์์ ์ฌ์ฉUDP (Transmission Control Protocol)
โ ์ฐ๊ฒฐ์ด๋ ์ค์ ์์ด ๋ฐ์ดํฐ ์ฆ์ ์ก์์
โก ๋ฐ์ดํฐ ์ ์กํ๊ณ ๋์ ํ์ธ ์ํจ x / ์ฌ์ ์กX / ์์คํ์ฉ
โข ์๋ ์กฐ์ ์ ๊ณต X
โฃ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ / ๋์์ ์ ์ก / DNS (๋๋ฉ์ธ์ IP์ฃผ์๋ก ๋ฐ๊พธ๋ ๊ฒ) ์ ๊ฐ์ ์ ์ํ ๋ฐ์ดํฐ ์ ์ก์ด ์ค์ํ ์์ฉํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ
๐ Note Code
Test1 - [ServerTest]
๐ป ์ ๋ ฅ
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class ServerTest {
private ArrayList<Socket> clients = new ArrayList<Socket>();
public void serverStart() { // ์๋ฒ์์ํ๋ ๋ฉ์๋
try {
ServerSocket ss = new ServerSocket(7777);
System.out.println("์๋ฒ์์!");
// ํด๋ผ์ด์ธํธ ๋ช๋ช
์ ์ํ ์ง ๋ชจ๋ฅด๋๊น ๋ฐ๋ณต๋ฌธ
while (true) {
Socket sc = ss.accept(); // ํด๋ผ์ด์ดํธ๊ฐ ์ ์ํ ๋๊น์ง cpu๊ฐ ๋ฉ์ถค = block์ํ
// thread ๋ง๋ค๊ธฐ
WorkThread wt = new WorkThread(sc); // ์์ socket sc(ํ์ฌ์ ์ํ ํด๋ผ์ด์ธํธ)๊ฐ new WorkThread();๋ก ๋์ด์ด
wt.start(); // ์๋ WorkThreadํด๋์ค์์ run์คํ
}
} catch (Exception e) {
System.out.println(e.toString());
}
}
class WorkThread extends Thread { // ์ค๋ ๋ ์ญํ
private Socket sc; // ํ์ฌ ์ ์ํ ํด๋ผ์ด์ธํธ
public WorkThread(Socket sc) { // ์ค๋ฒ๋ก๋ฉ๋ ์์ฑ์๋ก ๊ฐ์ฒด์์ฑ ํ๊ฒ ์
this.sc = sc;
}
@Override
public void run() {
String msg = null;
String ip = null;
try {
BufferedReader br = new BufferedReader(new InputStreamReader(sc.getInputStream()));
//ํน์ ์์ผ์ ์ฐ๊ฒฐ๋ ์๋๋ฐฉ ํธ์คํธ์ IP ์ฃผ์๋ฅผ ๋ฌธ์์ด ip๋ก ๋ณํ
ip = sc.getInetAddress().getHostAddress();
clients.add(sc); // ํ์ฌ ์ ์ํ ํด๋ผ์ด์ธํธ - list์ ๋ฃ์ด๋
// ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์์ฌ์ค์ ์๋ฆผ
msg = ip + "]๊ฐ ์
์ฅํ์ต๋๋ค";
// ๋ฉ์ธ์ง ์ ๋ฌ
while ((msg = br.readLine()) != null) {
// ๊ทธ ๋ฉ์ธ์ง = ๋๋ฅผ ์ ์ธํ ๋ค๋ฅธ ์ฌ๋๋ค
for (Socket ss : clients) { // ํ๋ ๊บผ๋
if (ss == sc) { // ํ๋ ๊บผ๋๋๋ฐ ๊ทธ๊ฒ ๋์ ๊ฐ์ผ๋ฉด
continue; // ์ด๋ฒ๋ง ์๋ต
}
// PrintWriter ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ ํ์ผ์ ์ฐ๋๋ฐ ์ฌ์ฉ
// getOutputStream() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์์ผ์ ์ถ๋ ฅ ์คํธ๋ฆผ์ ์ป์
// ์ด ์ถ๋ ฅ ์คํธ๋ฆผ์ ๋ฐ์ดํฐ๋ฅผ ์์ผ์ ํตํด ์๋๋ฐฉ์๊ฒ ์ ์กํ๋ ๋ฐ ์ฌ์ฉ๋จ
PrintWriter pw = new PrintWriter(ss.getOutputStream(), true); // true๊ฐ ์๋์ผ๋ก ๋ด๋ณด๋ด์ง, false๊ฐ ์์ผ๋ฉด
// ์๋์ผ๋ก ๋ณด๋ด์ง
pw.println(msg);
}
// ์๋ฒ์์ ๋ชจ๋ํฐ๋ง(๊ฐ์) ์์
System.out.println(msg);
}
} catch (Exception e) {
msg = ip + "]๊ฐ ํด์ฅํ์ต๋๋ค.";
try {
for (Socket ss : clients) {
if (ss == sc) {
continue;
}
PrintWriter pw = new PrintWriter(ss.getOutputStream(), true);
pw.println(msg);
}
System.out.println(msg);
sc = null; // ํด๋น ์์ผ์ ์ด๊ธฐํ ํ์
} catch (Exception e2) {
}
}
}
}
public static void main(String[] args) {
new ServerTest().serverStart();
}
๐ป ์ ๋ ฅ -[ ClientTest ]
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
//Client (์๋ฒ์์ผ ํ์ x)
//์ฑํ
ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ
public class ClientTest extends Frame implements ActionListener, Runnable { //๋ค์ค์์
private static final long serialVersionUID = 1L;
private TextArea ta = new TextArea();
private TextField tf = new TextField();
private Socket sc = null;
private int port = 7777; //์ฐพ์๊ฐ๋ ํฌํธ
private String host = "192.168.16.0"; //http://localhost = ๋ฃจํ๋ฐฑ์ฃผ์127.0.0.1 = ๋คํธ์ํฌ์์์ me = ์๊ธฐ์์ ์๋ฒ์ IP
public ClientTest() {
add(ta,BorderLayout.CENTER);
add(tf,BorderLayout.SOUTH);
tf.addActionListener(this);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setTitle("์ฑํ
ํด๋ผ์ด์ธํธ");
setSize(300,400);
setVisible(true);
}
public static void main(String[] args) {
new ClientTest().connect();
}
@Override
//์๋ํธ์ด ๋ณด๋ด๋ ๋ฉ์ธ์ง๋ฅผ ๋ฐ์ ๋
public void run() {
String str;
try {
if (sc == null) { // ๋ฐ์ดํฐ ์์ผ๋ฉด
return;
}
InputStream is = sc.getInputStream(); // ๋นจ๋ ๊ฝ๊ธฐ
BufferedReader br = new BufferedReader(new InputStreamReader(is)); // ์๋๊ฐ ๋ณด๋ธ ๋ฐ์ดํฐ ๋ฐ๊ธฐ
// ๋ฉ์ธ์ง ์ถ๋ ฅ (๋ช๊ธ์์ธ์ง ๋ชจ๋ฅด๋๊น)
while ((str = br.readLine()) != null) {
ta.append("\r\n" + str);
}
} catch (Exception e) {
ta.append("\r\n ์๋ฒ ์ฐ๊ฒฐ ์ข
๋ฃ");
// ์์ผ์ ์ด๊ธฐํ ๊ผญ ์ด๊ธฐํ ์์ผ์ค์ผํจ.
// ์๊ทธ๋ผ ๋ค์๋ฒ์ ์ฐ๊ฒฐํ ๋ ์์ฌ์ฐ๋ ๊ธฐ๊ฐ์ผ๋ก ์ธํด ์ฐ๊ฒฐ๋ถ๊ฐ
sc = null;
}
}
@Override
// ๋ด๊ฐ ๋ณด๋ด๋ ๋ฉ์ธ์ง
public void actionPerformed(ActionEvent e) {
String str = tf.getText();
if(str.trim().equals("")) { //์์ชฝ ๋น๊ตํ์ ๋ ์์ชฝ ๊ณต๋ฐฑ์ด null์ด๋?
return;
}
if(sc==null) {
return;
}
try {
//๋ด๋ณด๋ผ๋๋ OutputStream
OutputStream os = sc. getOutputStream();
//PrintWriter pw = new PrintWriter(sc. getOutputStream());
PrintWriter pw = new PrintWriter(os,true); //true = auto - flush (์๋์ผ๋ก ๋จ์์๋๊ฒ๋ค๋ ์ถ๋ ฅ๋จ)
pw.println("์์ธ] "+str); //์ํฐ ๊ผญ - ํด๋ผ์ด์ธํธ์ ๋ณด๋ด๋ ๋ฉ์ธ์ง
ta.append("\r\n์์ธ] "+str); //์์ ์ ์ฐฝ์ ๋์
tf.setText("");
tf.requestFocus();
} catch (Exception e2) {
ta.append("\r\n ์๋ฒ์ ์ ์์ด ๋๊ฒผ์ต๋๋ค.");
sc = null;
}
}
public void connect() {
try {
//์๋ฒ ์์ผ ์์ฑ(ํฌํธ๋ฒํธ 7777)
sc = new Socket(host,port); //client socket์ด ๋ง๋ค์ด์ ธ์ server์๋ ์ฐ๊ฒฐ์ด ๋จ
Thread th = new Thread(this);
th.start();
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
[์๋ฒ ์์!] - [ํด๋ผ์ด์ธํธ ์๋ฒ ์ด์ด์ ๋ํํ๊ธฐ]
๐ Note Code
Test2 - [FileServer]
๐ป ์ ๋ ฅ
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class FileServer {
class WorkThread extends Thread {
private Socket sc = null;
public WorkThread(Socket sc) {
this.sc = sc;
}
@Override
public void run() {
try {
// ํด๋ผ์ด์ธํธ ์ ์์๋ฃ
ObjectInputStream ois = // ๋ฐ์ดํฐ๋ฅผ ๋ฐ์
new ObjectInputStream(sc.getInputStream());
System.out.println("ํด๋ผ์ด์ธํธ ์ ์!!");
FileOutputStream fos = null;
Object ob = null;
while ((ob = ois.readObject()) != null) {
if (ob instanceof FileInfo) {
FileInfo info = (FileInfo) ob; // downcasting
if (info.getCode() == 100) {
String str = new String(info.getData());// ํ์ผ๋ช
fos = new FileOutputStream(str); // ํ์ผ ๋ง๋ฆ = fileoutputstream
System.out.println(str + "ํ์ผ ์ ์ก ์์!!");
} else if (info.getCode() == 110) { // ๋ฐ์ดํฐ์ ์ก
if (fos == null) {
break;
}
fos.write(info.getData(), 0, info.getSize());
// ์ฝ์ด์จ ๋ฐ์ดํฐ 0๋ถํฐ getsize๊น์ง ์ฝ์ด์ ๋ฐ์ดํฐ์ ์ ์ฅ
System.out.println(info.getSize() + "bytes ๋ฐ๋ ์ค!!");
} else if (info.getCode() == 200) {
String str = new String(info.getData());// ํ์ผ๋ช
fos.close();
System.out.println(str + "ํ์ผ ์ ์ก ์ข
๋ฃ!!");
}
}
}
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
public void serverStart() {
try {
ServerSocket ss = new ServerSocket(7777);
System.out.println("ํด๋ผ์ด์ธํธ ์ ์๋๊ธฐ์ค...");
Socket sc = ss.accept();
WorkThread wt = new WorkThread(sc);
wt.start();
} catch (Exception e) {
System.out.println(e.toString());
}
}
public static void main(String[] args) {
new FileServer().serverStart();
}
}
๐ป ์ ๋ ฅ -[ ClientTest ]
import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.Scanner;
public class FileClient {
public static void main(String[] args) {
int port = 7777;
String host = "127.0.0.1";
Socket sc = null;
// ํ์ผ์ ์ฝ์ด์ ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ณด๋
ObjectOutputStream oos = null;
Scanner scn = new Scanner(System.in);
String path; // ํ์ผ์ ๋ด๋ ๋ณ์
try {
System.out.println("์ ์กํ ํ์ผ๋ช
๋ฐ ๊ฒฝ๋ก? : ");
path = scn.next();
File f = new File(path); // f์์ ๊ฒฝ๋ก์ ๋ณด ๋ด๊ฒจ์ ธ์์
if (!f.exists()) {
System.out.println("ํ์ผ์ด ์์ต๋๋ค!");
System.exit(0); // ์ฝ์ํ๋ก๊ทธ๋จ์ด๊ธฐ๋๋ฌธ์ exit
}
// ์๋ฒ์ฐ๊ฒฐ
sc = new Socket(host, port);
oos = new ObjectOutputStream(sc.getOutputStream());
// getInputStream() - ํ์ผ์๋ฒ์์ ์ธํ์ผ๋ก ๋ฐ์์ผ๋ ์์ํ์ผ๋ก ๋ฑ๊ธฐ
oos.flush();
// ํ์ผ ์ ์ก ์์์ ์๋ฆผ
FileInfo info;
info = new FileInfo();
info.setCode(100);
// ๋ฐ์ดํฐ์๋ ํ์ผ์ด๋ฆ์ด ๋ค์ด๊ฐ์์
info.setData(f.getName().getBytes()); // setData = charํ์
+ .getBytes()๋ถ์ฌ์ผํจ
info.setSize((int) f.length());
// ์์ ๋ด์๋์ ๋ฐ์ดํฐ๋ฅผ oos๋ฅผ ํตํด writeObject๋ก ๋ณด๋
// ๋ฐ์ดํฐ ๋ณด๋!!!
oos.writeObject(info);
System.out.println(f.getName() + "ํ์ผ์ ์ก ์์!");
Thread.sleep(300);
// ํ์ผ๋ด์ฉ์ ์ก (ํ์ผ์ ์ฝ์ด์ผํจ)
FileInputStream fis = new FileInputStream(f);
int data = 0;
byte[] buffer = new byte[1024];
while ((data = fis.read(buffer, 0, 1024)) != -1) {
// ๋ด์ฉ๋ณด๋
info = new FileInfo();
info.setCode(110);
info.setSize(data);
info.setData(buffer);
oos.writeObject(info);
System.out.println(data + "bytes ์ ์ก์ค,,,");
buffer = new byte[1024]; // ์์ธใ
buffer ์ฐ๊ณ ๋์ด์ง๋ง ๋ค์ ์ด๋ ๊ฒ ๋ง๋ฆ์ผ๋ก์จ
// ์๋กญ๊ฒ buffer๋ง๋ค๊ธฐ
Thread.sleep(300);
}
fis.close();
// ํ์ผ ์ ์ก ์ข
๋ฃ
info = new FileInfo();
info.setCode(200);
info.setData(f.getName().getBytes());
info.setSize((int) f.length());
oos.writeObject(info);
System.out.println(f.getName() + "ํ์ผ์ ์ก ์ข
๋ฃ,,,");
Thread.sleep(300);
oos.close();
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
๐ป ์ ๋ ฅ -[ FileInfo ]
import java.io.Serializable;
public class FileInfo implements Serializable {
private static final long serialVersionUID = 1L;
/*
* code : ์น์์ ํจ์นํ ๋ 404, 200 http ์ํ์ฝ๋๋ก ์๊ธฐ ๋๋ฌธ 100 : ํ์ผ์ ์ก ์์ (ํ์ผ๋ช
์์ํ๋ค๊ณ ์ ์ก) 110 :
* ํ์ผ๋ด์ฉ ์ ์ก -> ์ฌ๋ฌ๋ฒ ๋ณด๋ด๋๊น ๋ฐ๋ณต 200 : ํ์ผ์ ์ก ์ข
๋ฃ (ํ์ผ๋ช
๋๋ฌ๋ค๊ณ ์ ์ก)
*
* size: ํ์ผํฌ๊ธฐ data: ํ์ผ๋ด์ฉ
*/
private int code;
private int size;
private byte[] data = new byte[1024]; // = buffer
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public byte[] getData() {
return data;
}
public void setData(byte[] data) {
this.data = data;
}
}
์ ์กํ ํ์ผ๋ช
๋ฐ ๊ฒฝ๋ก? :
c:\\Windows\\bootstat.dat
ํด๋ผ์ด์ธํธ ์ ์๋๊ธฐ์ค...
ํด๋ผ์ด์ธํธ ์ ์!!
bootstat.datํ์ผ ์ ์ก ์์!!
1024bytes ๋ฐ๋ ์ค!!
1024bytes ๋ฐ๋ ์ค!!
1024bytes ๋ฐ๋ ์ค!!
1024bytes ๋ฐ๋ ์ค!!
1024bytes ๋ฐ๋ ์ค!!
.
.
.
bootstat.datํ์ผ ์ ์ก ์ข
๋ฃ!!
๐ Note Code
์ปดํจํฐ๋ค์ด ์๋ก ํต์ ํ ๋ ์ฌ์ฉํ๋ ๊ท์น
์ง๊ธ๊น์ง ํ๋ main ํ๋กํ ์ฝ (์ธํฐ๋ท ํ์ค)
: TCP(ํธ๋ ๊ฒ์ฌ & ๋ง์ง๋ง๊ณผ ์ฒ์๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๊ฐ์์ง ๊ฒ์ฆ) / IP
(์ธํธ๋ผ๋ท ๊ตฌ์กฐ์์ ์ฌ์ฉ)
: UDP(๊ฐ๊น์ด๊ฑฐ๋ฆฌ์์ ๋ฐ์ดํฐ ๋ณด๋ผ ๋ ) / ๋ณด๋๋์ง ๊ด์ฌ์์ X
D Class : 224.0.0.0~239.255.255.255 / ๋ ์๊ณ ์ถ๋ค๋ฉด ip class ์์น
๋ฐ์ดํฐ๊ทธ๋จ
: DatagramSocket(์ฌ๋ฌ ip์ฃผ์, ๋ฉ์ธ์ง ๋ฑ๋ฑ ์ฐ๋ฆฌ๊ฐ ์๋ ์์ผ) / DatagramPacket = ์๋ํธ์๊ฒ ๋ณด๋ด๋ ๋ฐ์ดํฐ


Test3
๐ป ์ ๋ ฅ
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
//์ปดํจํฐ๋ค์ด ์๋ก ํต์ ํ ๋ ์ฌ์ฉํ๋ ๊ท์น (TCP / IP / UDP)
public class ChatCS extends Frame implements Runnable, ActionListener {
private static final long serialVersionUID = 1L;
// ๋ค์์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐ์ดํฐ๊ทธ๋จ์ ์ ์ก
private MulticastSocket ms = null;
private InetAddress xGroup = null;
private String host = "230.0.0.5";
private int port = 7777;
private String userName = "์";
private TextArea ta = new TextArea();
private TextField tf = new TextField();
public ChatCS() {
ta.setEnabled(false);// ์
๋ ฅ์ฐฝ ์ธ์๋ ํ์ดํ ๋ชป์น๊ฒํ๋ ๋ฅ๋ ฅ
add(ta, BorderLayout.CENTER);
add(tf, BorderLayout.SOUTH); // ์ฑํ
์ฐฝ
tf.addActionListener(this);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setTitle("๊ทธ๋ฃน์ฑํ
[" + host + "]");
setSize(400, 400);
setVisible(true);
tf.requestFocus();
}
public void setup() { // ๋ฉํฐ์บ์คํ
ํ๊ธฐ์ํ ์กฐ๊ฑด
try {
xGroup = InetAddress.getByName(host); // host์ฃผ์๋ก ์ ์ํ ์ฌ๋๋ค ๊ทธ๋ฃน 230.0.0.1
ms = new MulticastSocket(port); // ๋ฉํฐ ์์ผ 7777
ms.joinGroup(xGroup);// ์์ ๋๊ฐ ์ถฉ์กฑํ๋ ์ฌ๋ ๋ชจ์ฌ๋ผ
Thread th = new Thread(this);
th.start();
} catch (Exception e) {
System.out.println(e.toString());
}
}
// ์ฐ๊ฒฐ์ด ๋๊ฒผ์ ๋
public void disConnection() {
try {
ms.leaveGroup(xGroup);
ms.close();
} catch (Exception e) {
System.out.println(e.toString());
}
}
public static void main(String[] args) {
new ChatCS().setup();
}
@Override
public void actionPerformed(ActionEvent e) {
String str = tf.getText().trim();
if (str.equals("")) {//๋ฉ์ธ์ง ๋ฐ์ดํฐ X
return;
}
byte[] buffer = (userName + "]" + str).getBytes(); // byte[] buffer = ๋ฐ์ดํธ ํ์
, (userName+"]"+str) ์คํธ๋ง์ด๋ฏ๋ก char๋กท
// ๋ฐ๊ฟ์ผํจ
try {
DatagramPacket dp = new DatagramPacket(buffer, buffer.length, xGroup, port);//ํด๋นํจํท : ๊ทธ๋ฃน ์ฃผ์ (xGroup) , ํฌํธ ๋ฒํธ (port)
ms.send(dp); // ๋ฐ์ดํฐ๋ณด๋ด๊ณ
tf.setText("");// ์ด๊ธฐํ ์ ๋ฆฌ
tf.requestFocus();
} catch (Exception e2) {
System.out.println(e2.toString());
}
}
@Override
public void run() {
try {
while (true) {
byte[] buffer = new byte[512];
DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
ms.receive(dp);
String str = new String(dp.getData()).trim();
ta.append(str + "\r\n");
}
} catch (Exception e) {
System.out.println(e.toString());
disConnection();
}
}
}
[๊ฐ์ IP์ฃผ์ ๊ณต์ ํ ์ฌ๋๋ผ๋ฆฌ - ๊ทธ๋ฃน์ฑํ
๊ฐ๋ฅ]