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
반응형

'Language > Java' 카테고리의 다른 글

Book Manager System Program 최종  (0) 2021.04.07
Book Manager System Program  (0) 2021.04.06
채팅의 쓰레드화 04번  (0) 2021.04.06
패키지로 묶어서 소켓 돌리기  (0) 2021.04.05
TCP Socket프로그래밍  (0) 2021.04.05
TCP UDP  (0) 2021.04.05