13. 네트워크
1. 네트워킹
- 두 대 이상의 컴퓨터를 연결하여 네트워크를 구성하는 것
- 컴퓨터들을 서로 연결하여 데이터를 주고받거나 자원을 공유
- java.net 패키지 이용
- 통신의 3대 요소
- 서버 (Server)
- 클라이언트 (Client)
- 네트워크 (Network) : 서버와 클라이언트 연결
2. 클라이언트 / 서버
- 컴퓨터간의 관계를 역할로 구분
- 서버 : 서비스를 제공하는 컴퓨터
- 클라이언트 : 서비스를 사용하는 컴퓨터
- 서비스 : 서버가 클라이언트로부터 요청받은 작업을 처리하여 결고를 제공
- IP주소
- 컴퓨터를 구별하는데 사용되는 고유 값
- 4byte (32bit)의 정수, 4개의 정수 구분
- 네트워크 주소, 호스트 주소로 구성
3. InetAddress
- IP주소를 다루기 위한 클래스
package com.nw.day1;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class InetTest {
public static void main(String[] args) {
// InetAddress클래스 : IP주소를 다루기 위한 클래스
System.out.println("------www.naver.com-------");
String host = "www.naver.com";
InetAddress ip;
try {
ip = InetAddress.getByName(host);
System.out.println(ip);
System.out.println("hostname : "+ ip.getHostName());
System.out.println("hostAddress : "+ ip.getHostAddress());
System.out.println("\n-----local host------");
ip=InetAddress.getLocalHost();
System.out.println("hostname : "+ ip.getHostName());
System.out.println("hostAddress : "+ ip.getHostAddress());
InetAddress[] ipArr = InetAddress.getAllByName(host);
for(InetAddress ip2 : ipArr) {
System.out.println(ip2);
}
}catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
/*
------www.naver.com-------
www.naver.com/223.130.195.200
hostname : www.naver.com
hostAddress : 223.130.195.200
-----local host------
hostname : DESKTOP-56VTHAK
hostAddress : 192.168.0.66
www.naver.com/223.130.195.200
www.naver.com/223.130.195.95
*/
4. URL
- 인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소
- 프로토콜://호스트명:포트번호/경로명/파일명?쿼리스트링#
- 프로토콜 : 서버와 통신하는데 사용되는 통신규약(http)
- 호스트명 : 자원을 제공하는 서버의 이름 (www.naver.com)
- 포트번호 : 통신에 사용되는 서버의 포트번호 (80)
- 경로명 : 접근하려는 자원이 저장된 서버상의 위치 (/book/source/)
- 파일명 : 접근하려는 자원의 이름 (test.jsp)
- 쿼리스트링 : url 에서 ?이후의 부분(id=hong)
- 참조 : url에서 #이후 부분 (index1)
- URL클래스
package com.nw.day1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.MalformedInputException;
public class UrlTest1 {
public static void main(String[] args) {
BufferedReader br = null;
try {
URL url
= new URL("http://www.yes24.com/24/category/bestseller");
System.out.println("protocol : "+url.getProtocol());
System.out.println("host : "+url.getHost());
System.out.println("port : "+url.getPort());
//-1 반환 : 기본포트 사용시
System.out.println("file : "+url.getFile());
URLConnection conn = url.openConnection();
System.out.println("\n\n파일크기 : "+conn.getContentLength());
System.out.println("contentType : "+conn.getContentType());
//url과 연결된 urlconnection의 inputstream을 얻는다
InputStream is = url.openStream();
br = new BufferedReader(new InputStreamReader(is));
String data = "";
while((data=br.readLine()) != null) {
System.out.println(data);
}
}catch (MalformedInputException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(br!=null) br.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
URLConnection
- 어플리케이션과 url간 통신연결을 나타내는 클래스
- HttpURLConnection / JarURLConnection
- URL의 프로토콜이 http 프로토콜이라면
- openConnection()은 HttpURLConnection 반환
package com.nw.day1;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class URLGuiTest extends JFrame implements ActionListener{
private JLabel lb;
private JTextField tfUrl;
private JButton btOk;
private JTextArea taResult;
private JScrollPane scrollPane;
private JPanel pnl, pnl2;
private JComboBox<String> cbEncoding;
public URLGuiTest() {
super("URL - GUI 이용");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pnl=new JPanel(new BorderLayout());
pnl2=new JPanel(new BorderLayout());
lb=new JLabel("URL : ");
tfUrl=new JTextField(15);
btOk=new JButton("확인");
cbEncoding = new JComboBox<String>();
cbEncoding.addItem("EUC-KR");
cbEncoding.addItem("UTF-8");
pnl2.add(tfUrl,"Center");
pnl2.add(cbEncoding,"East");
pnl.add(lb,"West");
pnl.add(pnl2,"Center");
pnl.add(btOk,"East");
taResult=new JTextArea();
scrollPane=new JScrollPane(taResult);
add(scrollPane,"Center");
add(pnl,"North");
setSize(700, 700);
setVisible(true);
btOk.addActionListener(this);
tfUrl.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btOk || e.getSource()==tfUrl){
readUrl();
}
}
private void readUrl() {
//url을 읽어서 해당 웹페이지 정보를 TextArea에 출력하고, file에도 출력
BufferedReader br=null;
BufferedWriter bw=null;
StringWriter sw=null;
try {
URL url = new URL(tfUrl.getText());
InputStream in = url.openStream();
br=new BufferedReader(new InputStreamReader(in,
cbEncoding.getSelectedItem().toString()));
bw=new BufferedWriter(new FileWriter("text/url.txt"));
sw=new StringWriter();
String line="";
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
sw.write(line+"\n");
}
taResult.setText(sw.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(br!=null) br.close();
if(bw!=null) bw.close();
if(sw!=null) sw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new URLGuiTest();
}
}