자바

 

 

class GuguServer

 

package java18_2;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class GuguServer implements Runnable{

	private ServerSocket serverSocket; //서비스 제공을 위한 소켓
	private Socket socket; //클라이언트와의 통신을 위한 소켓
	private DataInputStream dis;// 입력 스트림(클라이언트이 입력값 처리)
	private DataOutputStream dos; // 출력 스트립(클라이언트에 전송)
	
	//생성자
	public GuguServer() {
		try {
			//서비스제공을 위한 소켓 생성, 9999번 소켓 생성
			serverSocket=new ServerSocket(9999);
			System.out.println("구구단 서비스가 시작 되었습니다.");
			

			while(true){
				//클라이언트의 접속을 기다림(대기상태)
				//접속하면 소켓이 생성
				socket=serverSocket.accept();
				InetAddress ip =socket.getInetAddress();
				System.out.println("클라이언트의 ip 주소 " + ip);
				//스트림 생성
//소켓.getInputStream()  소켓.getOutputStream() 입출력을 위한 스트림 생성				
				dis =new DataInputStream(socket.getInputStream());
				dos=new DataOutputStream(socket.getOutputStream());
				//백그라운드 스레드 생성

				//new Thread(Runnable을 구현한 객체)				
				Thread th =new Thread(this);
				th.start();//백그라운드 스레드 시작 요청(run() 가 실행됨)
			
				
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	@Override
	public void run() {
	
		System.out.println("현재 실행중인 스레드 이름  : " +Thread.currentThread().getName());
		try{
			while(true){
				//클라이언트가 전송한 콤보박스의 값을 수자로 읽음
				int dan =dis.read();
				System.out.println("클라이언트에서 요청한 값 : " + dan);
				//구구단 계산 결과를 StringBuilder 에 저장하여 클라이언트에게 전송
				StringBuilder sb =new StringBuilder();
				for(int i=1; i<=9; i++){
					sb.append(dan + "x" +i+"="+dan*i+"\r\n");
				}
				//클라이언트에게 결과 전송
				dos.writeUTF(sb.toString());
			}
			
		}catch(Exception e){
			e.printStackTrace();
		}
		
	}
	
	
	public static void main(String[] args) {
		new GuguServer();
	}
	
	
	
	
}






 

class GuguClient

package java18_2;

import java.awt.EventQueue;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;

public class GuguClient extends JFrame {

	private JPanel contentPane;
	private JTextArea taResult;
	private JComboBox cboDan;

	
	Socket socket;
	DataOutputStream dos;
	DataInputStream dis;
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					GuguClient frame = new GuguClient();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public GuguClient() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 457, 464);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("단을 선택하세요");
		lblNewLabel.setBounds(12, 10, 138, 15);
		contentPane.add(lblNewLabel);
		
		cboDan = new JComboBox();
		cboDan.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
			    //e.getStateChange() 콤보박스 상태가 바뀔때
				//ItemEvent.SELECTED 선택
				//ItemEvent.DESELECTED 선택 해제
				if(e.getStateChange() ==ItemEvent.SELECTED){
					System.out.println("콤보 박스 내용 선택...");
					//선택한 아이템의 인덱스
					Integer idx=cboDan.getSelectedIndex();
					//선택한 아이템의 내용
					String dan =cboDan.getSelectedItem().toString();
					taResult.setText("인덱스 : "+idx+"\n" + " 내용 : " + dan);	
					//서버에 접속 처리
					clientSocat(dan);
				}	
				
				
			}
		});
		cboDan.setModel(new DefaultComboBoxModel(new String[] {"2", "3", "4", "5", "6", "7", "8", "9"}));
		cboDan.setBounds(215, 7, 169, 21);
		contentPane.add(cboDan);
		
		taResult = new JTextArea();
		taResult.setBounds(12, 81, 372, 335);
		contentPane.add(taResult);
		
		


		//입출력 위한 스트림 생성
		try {
			//서버에 접속 시도 new Socket("서버 IP" ,  포토번호);
			socket=new Socket("localhost", 9999);
			dos =new DataOutputStream(socket.getOutputStream());
			dis=new DataInputStream(socket.getInputStream());
			//서버에 값 전송
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
	}
	
	
	public void clientSocat(String dan){
		try {
			dos.write(Integer.parseInt(dan));
			taResult.setText(dis.readUTF());
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	
	
	
	
}


 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

나의 예술은 가난한 사람들의 행복을 위해서 바쳐지지 않으면 안 된다. -베토벤

댓글 ( 4)

댓글 남기기

작성