2. Make three classes for each (ex. Server.java // SendThread.java // ReceiveThread.java)
<Server.java code>
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
// TODO Auto-generated method stub
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(5050);
System.out.println("***채팅방이 열렸습니다***");
System.out.println("기다리는 중...\n");
socket = serverSocket.accept(); // method를 사용하여 client로부터 연결 요청을 기다리고 요청이 오면 연결을 맺은 후 소켓을 생성함
System.out.println("상대방이 입장했습니다.");
SendThread st = new SendThread(socket);
ReceiveThread rt = newReceiveThread(socket);
st.start();
rt.start();
} catch (Exception e) {
} finally {
try {
// socket.close(); // 소켓을 닫는다.
serverSocket.close(); // 서버소켓을 닫는다.
} catch (Exception e) {
}
}
}
}
========================================================================
<Client.java code>
import java.net.Socket;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
Socket socket = null;
try {
socket = new Socket("210.125.97.125", 5050);
System.out.println("***채팅방에 들어왔습니다***");
SendThread st = new SendThread(socket);
ReceiveThread rt = new ReceiveThread(socket);
st.start();
rt.start();
} catch (Exception e) {
} finally {
try {
// socket.close();
} catch (Exception e) {
}
}
}
}
========================================================================
<SendThread.java code>
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class SendThread extends Thread {
Socket socket = null;
SendThread(Socket socket) {
this.socket = socket;
}
public void run() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// system.in을 이용하여 console창에 입력함.
PrintWriter writer = new PrintWriter(socket.getOutputStream());
// socket.getOutputStream을 통해 소켓의 출력 스트림을 가져온다. client로 data 보낼 수 있다.
// 데이터를 계속 주고받을 수 있도록
while (true) {
String str = reader.readLine();
if (str.equals("BYE")) {
break;
}
writer.println(str); // 한 행의 byte data를 쓴다.
writer.flush();
}
} catch (Exception e) {
} finally {
try {
socket.close();
} catch (Exception e) {
}
}
}
}
========================================================================
<ReceiveThread.java code>
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
public class ReceiveThread extends Thread {
Socket socket = null;
ReceiveThread(Socket s) {
socket = s;
}
public void run() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true) {
String str = reader.readLine();
if (str == null)
break;
System.out.println(str);
}
} catch (Exception e) {
}
}
}
<SendThread.java code>
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class SendThread extends Thread {
Socket socket = null;
SendThread(Socket socket) {
this.socket = socket;
}
public void run() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// system.in을 이용하여 console창에 입력함.
PrintWriter writer = new PrintWriter(socket.getOutputStream());
// socket.getOutputStream을 통해 소켓의 출력 스트림을 가져온다. client로 data 보낼 수 있다.
// 데이터를 계속 주고받을 수 있도록
while (true) {
String str = reader.readLine();
if (str.equals("BYE")) {
break;
}
writer.println(str); // 한 행의 byte data를 쓴다.
writer.flush();
}
} catch (Exception e) {
} finally {
try {
socket.close();
} catch (Exception e) {
}
}
}
}
========================================================================
<ReceiveThread.java code>
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
public class ReceiveThread extends Thread {
Socket socket = null;
ReceiveThread(Socket s) {
socket = s;
}
public void run() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true) {
String str = reader.readLine();
if (str == null)
break;
System.out.println(str);
}
} catch (Exception e) {
}
}
}
댓글 없음:
댓글 쓰기