728x90
반응형


// Thread적용
package Server;
import java.io.*;
import java.net.*;
import java.util.*;
import Config.Config004;
class Chatting extends Thread { // Thread의 extends
Socket sObjS;
Chatting(Socket sObjS) {
this.sObjS = sObjS; // 디폴트 생성자가 없으니까 무조건 인자를 넣어줘야한다.
}
public void run() { // run은 한번만 실행된다.
try {
DataOutputStream dos = new DataOutputStream(sObjS.getOutputStream());
DataInputStream dis = new DataInputStream(sObjS.getInputStream());
Scanner aScanner = new Scanner(System.in);
String sMessage;
while (true) { // 대화
System.out.print("전송할 메시지 : ");
sMessage = aScanner.nextLine();
dos.writeUTF(sMessage);
System.out.println(Config004.getTime() + "데이터를 전송했습니다.");
System.out.println("클라이언로부터 받은 메시지 :" + dis.readUTF());
if (sMessage.equals("EXIT")) {
break;
}
}
dos.close();
dis.close();
sObjS.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class Server004 {
public static void main(String args[]) {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(Config004.Port);
System.out.println(Config004.getTime() + "서버가 준비되었습니다.");
} catch (IOException e) {
e.printStackTrace();
}
while (true) {
try {
System.out.println(Config004.getTime() + "연결요청을 기다립니다.");
Socket socket = serverSocket.accept();
System.out.println(Config004.getTime() + socket.getInetAddress()
+ "로부터 연결요청이 들어왔습니다.");
Chatting aChatting = new Chatting(socket); // Thread 객체 생성
System.out.println("서버 Thread 시작...");
aChatting.start(); // 채팅 시작
System.out.println("서버 Thread Runnig...");
aChatting.join(); // 채팅 끝 | 예외만 처리해준다. InterruptedException e
System.out.println("서버 Thread 종료...");
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
}

package Client;
import java.io.*;
import java.net.*;
import java.util.Scanner;
import Config.Config004;
public class Client004 {
public static void main(String args[]) {
try {
System.out.println("서버에 연결중입니다. 서버IP :" + Config004.ServerIP);
Socket socket = new Socket(Config004.ServerIP, Config004.Port);
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
Scanner aScanner = new Scanner(System.in);
String sMessage;
while(true) {
sMessage = dis.readUTF();
System.out.println("서버로부터 받은 메시지 :" + sMessage);
System.out.print("전송할 메시지 : ");
dos.writeUTF(aScanner.nextLine());
System.out.println(Config004.getTime()+"데이터를 전송했습니다.");
if(sMessage.equals("EXIT")) {
break;
}
}
System.out.println("연결을 종료합니다.");
dis.close();
dos.close();
socket.close();
System.out.println("연결이 종료되었습니다.");
} catch(ConnectException ce) {
ce.printStackTrace();
} catch(IOException ie) {
ie.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
}
}

package Config;
import java.util.Date;
import java.text.SimpleDateFormat;
public interface Config004 {
public static final String ServerIP = "10.100.104.76";
public static final int Port = 7777;
public static String getTime() {
SimpleDateFormat f = new SimpleDateFormat("[hh:mm:ss]");
return f.format(new Date());
}
}

728x90
반응형
'Language > Java' 카테고리의 다른 글
| 210407 (0) | 2021.04.07 |
|---|---|
| Book Manager System Program 최종 (0) | 2021.04.07 |
| Book Manager System Program (0) | 2021.04.06 |
| 전이중방식 채팅 (0) | 2021.04.06 |
| 패키지로 묶어서 소켓 돌리기 (0) | 2021.04.05 |
| TCP Socket프로그래밍 (0) | 2021.04.05 |