서버 -> 클라이언트 

    package kr.co.kihd.echo;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Date;
    
    
    public class EchoServerTest {
    	
    	public static void main(String[] args) {
    		
    		int port = 7070;
    		ServerSocket serverSocket = null;
    		Socket socket = null;
    		
    		//서버소켓 생성
    		try {
    			serverSocket = new ServerSocket(port);
    			System.out.println("접속 대기중");
    			socket = serverSocket.accept();
    			System.out.println(socket.getLocalPort() + "포트와 클라이언트" 
    								+socket.getInetAddress() + "과 접속이 되었습니다.");
    			
    			OutputStream out = socket.getOutputStream();//클라이언트와 통신하기 위한 스트림을 생성
    			PrintWriter pout = new PrintWriter(out, true); //flush()기능 자동으로 제공
    			
    			pout.println("하이!!");
    			
    			InputStream ins = socket.getInputStream();
    			InputStreamReader inR = new InputStreamReader(ins);
    			BufferedReader bffR = new BufferedReader(inR);
    			
    			String clientMsg = "";
    			while( (clientMsg = bffR.readLine()) != null) {
    				if(clientMsg.startsWith("안녕") || clientMsg.startsWith("하이")) {
    					pout.println(socket.getInetAddress() + "님 반갑습니다.");
    				}
    				else if(clientMsg.startsWith("오늘은 몇일")) {
    					Date today = new Date();
    					pout.println(today.toString());
    				}
    			}
    			
    			out.close(); pout.close(); socket.close(); serverSocket.close(); //반드시 넣어줌
    			
    			
    			
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		
    		
    	
    	}
    }
    
    package kr.co.kihd.echo;
    
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;
    
    public class EchoClientTest {
    
    	public static void main(String[] args) throws Exception {
    		String ip = "192.168.100.145";
    		int port = 7070;
    		
    		//소켓 생성
    		Socket socket = new Socket(ip, port);
    		System.out.println("서버와 접속이 되었습니다.");
    		
    		//서버로부터 데이터를 입력받는 스트림
    		InputStream ins = socket.getInputStream(); //주스트림
    		InputStreamReader isr = new InputStreamReader(ins); //보조스트림
    		BufferedReader bff = new BufferedReader(isr); //버퍼 3개 연결
    		
    		OutputStream ous = socket.getOutputStream();
    		PrintWriter pout = new PrintWriter(ous, true);
    		
    		//키보드로부터 데이터를 입력받는 스트림
    		InputStreamReader inR = new InputStreamReader(System.in);
    		BufferedReader pout2 = new BufferedReader(inR);
    		
    		String serverMsg = "", sendMsg = ""; 
    		serverMsg = bff.readLine(); //서버에서 읽음.
    		System.out.println("서버메시지 >" + serverMsg); //서버에서 불러온 메시지
    		
    		while((sendMsg=pout2.readLine()) != null) {
    			pout.println(sendMsg);
    			
    			serverMsg = bff.readLine();
    			System.out.println("서버메시지 >" + serverMsg);	
    		}
    		
    		bff.close(); socket.close(); isr.close(); ins.close();
    	}
    
    }
    

    서버와 접속이 되었습니다.
    서버메시지 >하이!!
    오늘은 몇일
    서버메시지 >Thu Dec 03 09:44:19 KST 2020


    1 대 1로 대화하는 서버 클라이언트

    package kr.co.kihd.chatting;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    
    public class ChattingServer implements Runnable{
    	
    	Socket sk;
    	public ChattingServer() {
    		try {
    			ServerSocket ssk = new ServerSocket(6060);
    			//클라이언트와 통신하는 소켓 생성됨.
    			sk = ssk.accept(); 
    			System.out.println("클라이언트와 연결이 되었습니다.");
    			
    			//클라이언트에게 데이터를 보내기위한 스트림 생성
    			//표준입력인 키보드와 연결
    			InputStreamReader inR = new InputStreamReader(System.in);
    			BufferedReader buR = new BufferedReader(inR);
    			
    			//클라이언트에게 메세지를 보내기위한 스트림 생성
    			//자동 flush처리 
    			PrintWriter pout = new PrintWriter(sk.getOutputStream(),true);
    			
    			Thread thread = new Thread(this); //자기자신을 스레드로 만듬.
    			thread.start();
    			
    			String msg = "";
    			while( (msg = buR.readLine())!= null) {
    				pout.println(msg);
    			}
    				
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}//생성자
    	
    	public static void main(String[] args) {
    		new ChattingServer();
    	}
    	//받는 메시지 처리는 스레드로 함
    	@Override
    	public void run() {
    		//클라이언트 메시지를 받아서 콘솔에 출력하는 기술
    		InputStream ins;
    		
    		try {
    			ins = sk.getInputStream();
    			InputStreamReader ir = new InputStreamReader(ins);
    			BufferedReader buR = new BufferedReader(ir);
    			
    			String clientMsg ="";
    			while(true) {
    				clientMsg = buR.readLine();
    				System.out.println("Client > " + clientMsg);
    			}//while
    			
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }
    package kr.co.kihd.chatting;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    public class ChattingClient implements Runnable {
    	
    	String ip = "192.168.100.145";
    	int port = 6060;
    	Socket sk;
    	
    	public ChattingClient() {
    		try {
    			sk = new Socket(ip, port);
    			System.out.println("채팅서버와 연결되었습니다.");
    			
    			//서버로 보낼 메세지를 키보드로 입력받는 스트림 생성
    			InputStreamReader inR = new InputStreamReader(System.in);
    			BufferedReader buR = new BufferedReader(inR);
    			
    			//서버로 보낼메시지를 위한 스트림.
    			PrintWriter pout = new PrintWriter(sk.getOutputStream(), true);
    			
    			Thread thread = new Thread(this);
    			thread.start();
    			
    			String sendMsg = "";
    			while( (sendMsg = buR.readLine()) != null) {
    				pout.println(sendMsg);
    			}
    			
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} 
    		
    	}//생성자
    	
    	public static void main(String[] args) {
    		new ChattingClient();
    	}
    	
    	//받는 메시지 처리는 스레드로 함
    	@Override
    	public void run() {
    		InputStream ins;
    		try {
    			ins = sk.getInputStream();
    			BufferedReader buR = new BufferedReader(new InputStreamReader(ins));
    			
    			String svrMsg = "";
    			while(true) {
    				svrMsg = buR.readLine();
    				System.out.println("Server > " + svrMsg);
    				//서로 상대방이 입력한 것을 콘솔창에 출력
    			}
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    }
    

    클라이언트와 연결이 되었습니다.
    안녕하세요
    Client > 
    Client > 네안녕하세요


    1 대 다수로 대화하는 서버 클라이언트 GUI

    package kr.co.kihd.multichatting;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.ArrayList;
    
    public class ChatServer {
    	private ServerSocket ss;
    	//후입선출 자료구조에 add를 해놓기 위해서
    	private ArrayList<ChatHandler> list;
    	
    	public ChatServer() throws Exception {
    		
    		try {
    			ss = new ServerSocket(9900);
    			System.out.println("클라이언트 연결 대기중....");
    			
    			list = new ArrayList<ChatHandler>();
    			
    			while(true) {
    				Socket socket = ss.accept();
    				//스레드 생성
    				ChatHandler handler = new ChatHandler(socket, list);
    				handler.start();  //통신이 가능하도록 스레드 시작.
    				
    				list.add(handler); //클라이언트 추가 LIFO 구조
    				
    			}
    			
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}//생성자
    	
    	
    	public static void main(String[] args) throws Exception {
    		new ChatServer();
    	}
    	
    }
    
    package kr.co.kihd.multichatting;
    //멀티클라이언트 생성위해서. 소켓역할을 함.
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.util.ArrayList;
    
    public class ChatHandler extends Thread{
    	private Socket socket;
    	private BufferedReader br;
    	private PrintWriter pw;
    	private ArrayList<ChatHandler> list;
    	
    	//생성자 오버로딩
    	public ChatHandler(Socket socket, ArrayList<ChatHandler> list) throws Exception {
    		this.socket = socket;
    		this.list = list;
    		br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    		pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
    		System.out.println("클라이언트 연결");
    	}
    	
    	@Override
    	public void run() {
    		try {
    		   String nickName = br.readLine();
    		   broadcast(nickName + "님이 입장하셨습니다.");
    		   
    		   //읽기 - 같은방에 있는 사람들에게 브로드케스팅.
    		   String line = null;
    		   while(true) {
    			   line = br.readLine();
    			   if(line == null || line.toLowerCase().equals("exit")) {
    				   break;
    			   }
    			   
    			   broadcast("[" +nickName+ "]" + line );
    		   }//while
    		   
    		   //끝날때
    		   pw.println("exit");
    		   pw.flush();
    		   
    		   list.remove(this);
    		   broadcast(nickName + "님이 퇴장하였습니다.");
    		   
    		   br.close(); pw.close(); socket.close();
    		   
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    	public void broadcast(String msg) {
    		for(ChatHandler handler : list) {
    			handler.pw.println(msg);
    			handler.pw.flush();
    		}
    	}
    	
    }
    
    package kr.co.kihd.multichatting;
    
    import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.ScrollPane;
    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.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.ScrollPaneConstants;
    import javax.swing.plaf.basic.BasicArrowButton;
    
    
    public class ChatClient extends JFrame implements Runnable, ActionListener{
    
    	private JTextField input;
    	private JTextArea output;
    	private JButton send;
    	private Socket socket;
    	private BufferedReader br;
    	private PrintWriter pw;
    	
    	public ChatClient() {//화면 구성
    		input = new JTextField(15);
    		
    		output = new JTextArea();
    		JScrollPane scroll = new JScrollPane(output);         //항상 스크롤이 표시되도록.
    		scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    		output.setEditable(false); //수정이 되지 않게
    		
    		send = new JButton("보내기");
    									//위치 설정
    		JPanel p = new JPanel(new BorderLayout());
    		p.add("Center", input);
    		p.add("East", send);
    		
    		Container c = this.getContentPane();
    		c.add("Center", scroll);
    		c.add("South", p);
    		
    		setBounds(500, 150, 500, 500);
    		setVisible(true);
    		
    		//클로징 원하는것만 오버라이딩 Adapter
    		addWindowListener(new WindowAdapter() {
    			@Override
    			public void windowClosed(WindowEvent e) {
    				pw.println("exit");
    				pw.flush();
    			}
    		});
    		
    	}
    	
    	//클라이언트 객체 생성후 바로 실행되는 코드
    	public void service() {
    		//서버IP
    		String serverIP =
    				JOptionPane.showInputDialog(this, "서버IP를 입력하세요", "192.168.100.145");
    		if(serverIP == null || serverIP.length() == 0) {
    			System.out.println("서버IP가 입력되지 않았습니다. 서버연결을 종료합니다.");
    			System.exit(0);
    		}
    		//닉네임
    		String nickName = 
    				JOptionPane.showInputDialog(this, "닉네임을 입력하세요.", "닉네임", JOptionPane.INFORMATION_MESSAGE);
    		if(nickName ==  null || nickName.length() == 0) {
    			nickName = "guest";
    		}
    		//소켓생성
    		try {
    			socket = new Socket(serverIP, 9900);
    			
    			br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    			pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
    			
    			//서버에 보내기
    			pw.println(nickName);
    			pw.flush();
    			
    		} catch (UnknownHostException e) {
    			System.out.println("서버를 찾을수 없습니다.");
    			e.printStackTrace();
    		} catch (IOException e) {
    			System.out.println("서버와 연결에 실패하셨습니다.");
    			e.printStackTrace(); //스택에 담아있는 메서드를 출력 : 어디서 문제가 있는지 확인
    			
    		}
    		
    		//이벤트 -> input send 리스너 연결
    		send.addActionListener(this);
    		input.addActionListener(this);
    		
    		//스레드 생성
    		Thread thread = new Thread(this);
    		thread.start(); //run호출
    		
    	}
    	
    	public static void main(String[] args) {
    		new ChatClient().service();
    
    	}
    
    	
    	
    	@Override
    	public void run() {
    		// 서버로부터 받는쪽
    		String line = null;
    		while(true) {
    		try {
    			line = br.readLine();
    			
    			if(line == null || line.toLowerCase().equals("exit")) {
    				br.close(); pw.close(); socket.close();
    				System.exit(0);
    			}
    			
    			
    			
    		} catch (IOException e) {
    		
    			e.printStackTrace();
    		}
    		
    		// line을 textarea에 append한다.
    		// 사용자로 부터 입력받은 내용을 JTextArea에 붙여준다.
    		output.append(line + "\n");
    					
    		//글이 자동으로 맨아래로 스크롤링됨.
    		int pos = output.getText().length();
    		output.setCaretPosition(pos); 
    		
    		}//while
    	}
    	
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		//서버로 보내기
    		String line = input.getText();
    		pw.println(line);
    		pw.flush();
    		input.setText("");
    		
    	}
    
    }
    

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading