23.02.01(Java)

MH S·2023년 2월 1일

Java

목록 보기
13/16

1. Net

  1. 도메인 주소 콘솔에 띄우는 예제
package net;

import java.net.InetAddress;

public class InetAddressEx1 extends MFrame {
	public static void main(String[] args) {
		try {
			// ip 및 도메인 객체화
			InetAddress add = InetAddress.getLocalHost();
			System.out.println("Host Name:" + add.getHostName());
			System.out.println("Host Address:" + add.getHostAddress());
			add = InetAddress.getByName("auction.co.kr");
			System.out.println("auction address:" + add.getHostAddress());
			InetAddress adds[] = InetAddress.getAllByName("naver.com");
			for (int i = 0; i < adds.length; i++) {
				System.out.println("naver:" + adds[i]);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}



  1. 프레임을 통해 주소입력 후 ip값 받아오는 예제
package net;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Font;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.net.UnknownHostException;

public class InetAddressFrameEx1 extends MFrame implements ActionListener {
	TextArea ta;
	TextField tf;
	Label l;
	private Button lookup;

	public InetAddressFrameEx1() {

		setTitle("InetAddress Example");
		Panel p = new Panel();
		p.setLayout(new BorderLayout());
		p.add(new Label("호스트이름"), BorderLayout.NORTH);
		p.add(tf = new TextField("", 40));
		p.add(lookup = new Button("호스트 정보 얻기"), BorderLayout.SOUTH);
		tf.addActionListener(this);
		lookup.addActionListener(this);
		add(p, BorderLayout.NORTH);
		ta = new TextArea("인터넷주소\n");
		ta.setFont(new Font("Dialog", Font.BOLD, 15));
		ta.setForeground(Color.BLUE);
		ta.setEditable(false);
		add(ta);
		validate();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		Object obj = e.getSource();
		InetAddress intAddr;
		try {
			intAddr = InetAddress.getLocalHost();
		} catch (UnknownHostException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		if(obj == lookup||obj == tf) {
			String host = tf.getText().trim();
			try {
				 intAddr = InetAddress.getByName(host);
				 String add = intAddr.getHostName();
				 String ip = intAddr.getHostAddress();
				 ta.append(" " +add+"\n");
				 ta.append(" " + ip +"\n");
			} catch (Exception e2) {
				ta.append(" [" + host + "]\n");
				ta.append("해당되는 호스트가 없습니다.");
			}
			tf.setText("");
			tf.requestFocus();
		}
	}

	public static void main(String[] args) {
		new InetAddressFrameEx1();
	}

}



  1. URL 이용해서 사이트 코드 읽기
package net;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;

public class UrlEx1 {

	public static void main(String[] args) {
		String str = "https://search.naver.com:80/search.naver?" + "where=nexearch&sm=top_hty&fbm=1&ie=utf8&"
				+ "query=java#top";
		try {
			URL url = new URL(str);
			System.out.println("Protocol " + url.getProtocol());
			System.out.println("Host " + url.getHost());
			System.out.println("Port " + url.getPort());
			System.out.println("Path " + url.getPath());
			System.out.println("Query " + url.getQuery());
			System.out.println("Filename " + url.getFile());
			System.out.println("ref " + url.getRef());
			url = new URL("https://auction.co.kr");
			BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(),"UTF-8"));
			String line = "";
			while(true) {
				line = br.readLine();
				if(line==null)
					break;
				System.out.println(line);
			}
			br.close();
			System.out.println("End~~~~~~~~~~");
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}
  1. url 이용해 프레임 textArea에 코드 출력 및 파일 저장
package net;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.FileDialog;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.URL;

public class URLFrameEx1 extends MFrame implements ActionListener {

	TextArea ta;
	TextField tf;
	Button connect;
	Button save;
	FileDialog saveDialog;
	URL url;

	public URLFrameEx1() {
		super(500, 500);
		setTitle("ViewHost");
		Panel p = new Panel();
		p.add(tf = new TextField("http://", 40));
		p.add(connect = new Button("connect"));
		p.add(save = new Button("save"));
		ta = new TextArea();
		add(p, BorderLayout.NORTH);
		add(ta);
		save.setEnabled(false);
		connect.addActionListener(this);
		save.addActionListener(this);
		tf.addActionListener(this);
		validate();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		Object obj = e.getSource();
		String str = tf.getText();
		if (obj == tf || obj == connect) {
			String host = tf.getText().trim();
			try {
				url= new URL(host);
			} catch (Exception e2) {
				ta.append("해당되는 호스트가 없습니다.");
			}
			ta.setText("");
			connectHost(url);
			save.setEnabled(true);
		} else if (obj == save) {
			createFile(url.getHost(), ta.getText());
			save.setEnabled(false);
			tf.setText("http://");
			ta.setText("");
			ta.append("저장하였습니다.");
			tf.requestFocus();
		}

	}

	public void connectHost(URL url) {
		try {
			BufferedReader br = new BufferedReader
					(new InputStreamReader(url.openStream(),"UTF-8"));
			String line = "";
			while(true) {
				line = br.readLine();
				if(line==null) break;
				ta.append(line+"\n");
			}
			br.close();
		} catch (Exception e) {
			ta.append("해당하는 호스트가 없습니다.");
		}
	
	}
	
	public void createFile(String file, String content) {
		try {
			FileWriter fw = new FileWriter("net/"+file+".html");
			fw.write(content);
			fw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

	public static void main(String[] args) {
		URLFrameEx1 ex = new URLFrameEx1();
	}
}



2. 소켓

  1. 소켓 예제(서버)
package net;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class EchoServer {

	public static final int PORT = 8000;

	public EchoServer() {
		try {
			int cnt = 0; // Cient 접속 개수
			ServerSocket server = new ServerSocket(PORT);
			System.out.println("EchoServer Start.....");
			while (true) {
				// Client 가 접속할때 까지 대기 상태
				Socket sock = server.accept();
				EchoThread et = new EchoThread(sock);
				et.start();
				cnt++;
				System.out.println("Client " + cnt + " Socket");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// Client 를 대응관리 하기 위한 Thread 상속 내부 클래스 선언
	class EchoThread extends Thread {
		BufferedReader in;
		PrintWriter out;
		Socket sock;

		public EchoThread(Socket sock) {
			try {
				this.sock = sock;
				in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
				out = new PrintWriter(sock.getOutputStream(), true);
			} catch (Exception e) {
				e.printStackTrace();
			}

		}

		@Override
		public void run() {
			try {
				// Client 가 접속하면 처음으로 받는 메세지
				out.println("Hello Enter BYB exit");
				while(true) {
					// Client 가 메세지 보낼때까지 대기
					String line = in.readLine();
					if(line == null) {
						break;
					}else
					out.println("Echo: " +line);
					if(line.equalsIgnoreCase("BYB"))
						break;
					
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {
		EchoServer server = new EchoServer();
	}
}

클라이언트

package net;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

import javax.swing.JFrame;

public class EchoFrameClient extends JFrame
implements ActionListener{
	
	Button btn1, btn2;
	TextField tf1, tf2;
	TextArea ta;
	Panel p1, p2;
	BufferedReader in;
	PrintWriter out;
	static final int PORT = 7000;
	
	public EchoFrameClient() {
		setSize(350, 400);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("EchoFrameClient");
		p1 = new Panel();
		p1.add(new Label("HOST ",Label.CENTER));
		p1.add(tf1 = new TextField("127.0.0.1",25));
		p1.add(btn1 = new Button("Connect"));
		
		p2 = new Panel();
		p2.add(new Label("CHAT ",Label.CENTER));
		p2.add(tf2 = new TextField("",25));
		p2.add(btn2 = new Button("SEND"));	
		
		tf1.addActionListener(this);
		tf2.addActionListener(this);
		btn1.addActionListener(this);
		btn2.addActionListener(this);
		
		add(p1,BorderLayout.NORTH);
		add(ta=new TextArea());
		add(p2,BorderLayout.SOUTH);
		setVisible(true);
		validate();
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		Object obj = e.getSource();
		if(obj == tf1 || obj == btn1 /*connect*/) {
			connect(tf1.getText().trim());
			tf1.setEnabled(false);
			btn1.setEnabled(false);
			tf2.requestFocus();		
		}else if(obj == tf2 || obj == btn2 /*chat*/) {
			// tf2의 입력된 문자열을 서버로 보낸다
			out.println(tf2.getText());
			try {
				// 서버로 부터 문자열 전송 받음
				ta.append(in.readLine()+"\n");
				tf2.setText("");
				tf2.requestFocus();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}
	
	
	public void connect(String host){
		try {
			Socket sock = new Socket(host,PORT);
			in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
			out = new PrintWriter(sock.getOutputStream(), true);
			// 서버에서 최초로 보내는 메시지 전달
			ta.append(in.readLine() + "\n");
			tf2.requestFocus();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
	public static void main(String[] args) {
		new EchoFrameClient();
	}
}



서버 프레임에서 Connect 할시 클라이언트에서 Client Socket 이라는 반응이온다.

0개의 댓글