Language/Java

전이중방식 채팅

원2 2021. 4. 6. 09:30
728x90
반응형

// 현재 소스의 전이중 문제점 
package Server;

import java.io.*;
import java.net.*;
import java.util.*;
import Config.Config003;

public class Server003 {
	public static void main(String args[]) {
		ServerSocket serverSocket = null;
		
		try {
			serverSocket = new ServerSocket(Config003.Port);
			System.out.println(Config003.getTime()+"서버가 준비되었습니다.");
		} catch(IOException e) { e.printStackTrace(); }

		while(true) {
			try {
				System.out.println(Config003.getTime()+"연결요청을 기다립니다.");
				Socket socket = serverSocket.accept();
				System.out.println(Config003.getTime()+ socket.getInetAddress() 
                                            + "로부터 연결요청이 들어왔습니다.");

				DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
				DataInputStream dis = new DataInputStream(socket.getInputStream());
				Scanner aScanner = new Scanner(System.in);
				String sMessage;
				
				while(true) { // 대화
					System.out.print("전송할 메시지 : ");
					sMessage = aScanner.nextLine();
					dos.writeUTF(sMessage);
					System.out.println(Config003.getTime()+"데이터를 전송했습니다.");
					System.out.println("클라이언로부터 받은 메시지 :"+dis.readUTF());
					if(sMessage.equals("EXIT")) {
						break;
					}
				}

				dos.close();
				dis.close();
				socket.close();
			} catch (IOException e) { 
				e.printStackTrace(); 
			}
		}
	}


}

package Client;

import java.io.*;
import java.net.*;
import java.util.Scanner;

import Config.Config003;

public class Client003 {
	public static void main(String args[]) {
		try {
			System.out.println("서버에 연결중입니다. 서버IP :" + Config003.ServerIP);
			Socket socket = new Socket(Config003.ServerIP, Config003.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(Config003.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 Config003 {
	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
반응형