본문 바로가기

JAVA

자바채팅프로그래밍 -UDP소켓이용 채팅프로그래밍

//서버

package chap6;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public class ChatingServer extends Frame implements ActionListener{
	private TextField enter;
	private TextArea display;
	private DatagramPacket sendPacket, receivePacket;
	private DatagramSocket socket;
	
	public ChatingServer(){
		super("서버");
		enter = new TextField("메세지를 입력하세요");
		enter.addActionListener(this);
		add(enter,BorderLayout.NORTH);
		display = new TextArea();
		add(display, BorderLayout.CENTER);
		addWindowListener(new WinListener());
		setSize(400,300);
		setVisible(true);
		try{
			socket = new DatagramSocket(5000);
		}catch(SocketException se){
			se.printStackTrace();
			System.exit(1);
		}
	}
	//패킷이 올때까지 기다릴 동안 상대방에서 온 패킷을 받는다.
	public void waitForPackets(){
		while(true){
			try{
				byte data[] = new byte[100];
				receivePacket = new DatagramPacket(data, data.length);
				socket.receive(receivePacket);
				display.append(receivePacket.getPort() + ": " + new String(receivePacket.getData()));
				display.append("\n");
				}catch(IOException io){
					display.append(io.toString() + "\n");
					io.printStackTrace();
				}
		}
	}
	//엔터가 발생할때 생기는 이벤트
	public void actionPerformed(ActionEvent e) {
		try {
			String s = e.getActionCommand();
			enter.setText("");
			display.append("me" + ": " +e.getActionCommand() +"\n");
			byte data[] = s.getBytes();
			sendPacket = new DatagramPacket(data, data.length,InetAddress.getLocalHost(),4000);
			socket.send(sendPacket);
			
			}catch(IOException exception) {
				display.append(exception.toString() + "\n");
				exception.printStackTrace();
			}
	}
	
	public static void main(String args[]){
		ChatingServer s = new ChatingServer();
		s.waitForPackets();
	}
	class WinListener extends WindowAdapter{
		public void windowClosing(WindowEvent we) {
		System.exit(0);
		}
	}
}
	

//클라이언트

package chap6;
import java.io.*;
import java.net.*;

import chap6.ChatingServer.WinListener;

import java.awt.*;
import java.awt.event.*;

public class ChatingClinet extends Frame implements ActionListener{
	private TextField enter;
	private TextArea display;
	private DatagramPacket sendPacket, receivePacket;
	private DatagramSocket socket;
	
	public ChatingClinet(){
		super("클라이언트");
		enter = new TextField("메세지를 입력하세요");
		enter.addActionListener(this);
		add(enter,BorderLayout.NORTH);
		display = new TextArea();
		add(display, BorderLayout.CENTER);
		addWindowListener(new WinListener());
		setSize(400,300);
		setVisible(true);
		//Datagram소켓생성
		try{
			socket = new DatagramSocket(4000);
		}catch(SocketException se){
			se.printStackTrace();
			System.exit(1);
		}
	}
	public void waitForPackets(){
		while(true){
			try{
				byte data[] = new byte[100];
				receivePacket = new DatagramPacket(data, data.length);
				socket.receive(receivePacket);
				display.append(receivePacket.getPort() + ": " + new String(receivePacket.getData()));
				display.append("\n");		
			}catch(IOException io){
				display.append(io.toString() + "\n");
				io.printStackTrace();
			}
		}
	}
	//엔터가 발생할때 생기는 이벤트
	public void actionPerformed(ActionEvent e) {
		try {
			String s = e.getActionCommand();
			enter.setText("");
			display.append("me" + ": " + e.getActionCommand() +"\n");
			byte data[] = s.getBytes();
			sendPacket = new DatagramPacket(data, data.length,InetAddress.getLocalHost(),5000);
			socket.send(sendPacket);
			
			}catch(IOException exception) {
				display.append(exception.toString() + "\n");
				exception.printStackTrace();
			}
	}
	public static void main(String args[]){
		ChatingClinet s = new ChatingClinet();
		s.waitForPackets();
	}
	class WinListener extends WindowAdapter{
		public void windowClosing(WindowEvent we) {
		System.exit(0);
		}
	}	
}

 

//결과