
Socket
: 네트워크상에서 데이터 주고받을 수 있도록
- 클라이언트와 서버는 소켓 사용해서 통신함
- 클라이언트 : 서버IP랑 포트에 연결된 소켓생성
서버 : 클라이언트의IP와 포트에 연결된 소켓 생성
InputStream : 바이트 단위로 데이터를 읽을 수 있는 입력 스트림
getInputStream() : Socket 클래스의 메소드 / 클라이언트에서 서버로부터 오는 (네트워크 소켓을 통해) 데이터를 읽기위한 통로
프로토콜(Protocol) :
- 컴퓨터나 기기간에 통신하기위한 규칙
- HTTP(Hyper Text Transfer Protocol) : 웹에서 데이터 주고받기 위한 프로토콜
- TCP (Transmission Control Protocol)
- UDP (User Datagram Protocol)
📌 Note Code

Test1
💻 입력
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//마우스 event
public class Test1 extends Frame {
private static final long serialVersionUID = 1L;
private int x, y;
private Label lbl = new Label("",Label.CENTER);
public Test1() {
add(lbl,BorderLayout.SOUTH);
addMouseListener(new MouseHandler());
addMouseMotionListener(new MouseMotionHandler());
setBackground(new Color(150, 150, 150));//배경색
setForeground(new Color(0, 0, 255));//글자색
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setTitle("좌표출력");
setSize(400, 400);
setVisible(true);
}
public static void main(String[] args) {
new Test1();
}
//paint랑 update는 마우스 가장 기본메서드
@Override
public void paint(Graphics g) {
String str;
str = "("+x+","+y+")";
g.drawString(str,x,y);
}
@Override
public void update(Graphics g) { //드래그를 하게되면 .....점들이 이어진 과거를 기억 = 누적
paint(g);
}
class MouseHandler extends MouseAdapter{
@Override
public void mousePressed(MouseEvent e) {
x = e.getX();
y = e.getY();
repaint(); //update() 호출 -> paint() 호출
}
@Override
public void mouseReleased(MouseEvent e) {
}
}
class MouseMotionHandler extends MouseMotionAdapter{
@Override
public void mouseDragged(MouseEvent e) {
x = e.getX();
y = e.getY();
repaint(); //update() 호출 -> paint() 호출
}
@Override
public void mouseMoved(MouseEvent e) {
String str = String.format("(%d,%d)", e.getX(),e.getY());
lbl.setText(str);
}
}
}
[좌표출력]
📌 Note Code




Test2
💻 입력
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//마우스 event
public class Test1 extends Frame {
private static final long serialVersionUID = 1L;
private int x, y;
private Label lbl = new Label("",Label.CENTER);
public Test1() {
add(lbl,BorderLayout.SOUTH);
addMouseListener(new MouseHandler());
addMouseMotionListener(new MouseMotionHandler());
setBackground(new Color(150, 150, 150));//배경색
setForeground(new Color(0, 0, 255));//글자색
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setTitle("좌표출력");
setSize(400, 400);
setVisible(true);
}
public static void main(String[] args) {
new Test1();
}
//paint랑 update는 마우스 가장 기본메서드
@Override
public void paint(Graphics g) {
String str;
str = "("+x+","+y+")";
g.drawString(str,x,y);
}
@Override
public void update(Graphics g) { //드래그를 하게되면 .....점들이 이어진 과거를 기억 = 누적
paint(g);
}
class MouseHandler extends MouseAdapter{
@Override
public void mousePressed(MouseEvent e) {
x = e.getX();
y = e.getY();
repaint(); //update() 호출 -> paint() 호출
}
@Override
public void mouseReleased(MouseEvent e) {
}
}
class MouseMotionHandler extends MouseMotionAdapter{
@Override
public void mouseDragged(MouseEvent e) {
x = e.getX();
y = e.getY();
repaint(); //update() 호출 -> paint() 호출
}
@Override
public void mouseMoved(MouseEvent e) {
String str = String.format("(%d,%d)", e.getX(),e.getY());
lbl.setText(str);
}
}
}
[그림출력]
📌 Note Code
Test3
💻 입력
//Class 클래스
//특정 클래스나 인터페이스의 정보를 검색
class Test{
public void write() {
System.out.println("테스트");
}
}
public class Test3 {
public static void main(String[] args) throws Exception {
Class c = Class.forName("com.day20.Test"); // **Class(클래스).forName(메서드)("패키지이름.클래스이름") -> throws Exception 예외처리 필수
Object o = c.newInstance(); //클래스를 객체생성도 할 수 있다는 것을 보여줌
Test t = (Test)o;
t.write();
}
}
테스트
📌 Note Code
Test4
💻 입력
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test4 {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("클래스명[java.lang.String] : ");
String str = br.readLine();
Class cls = Class.forName(str); //**기억해두기
//생성자 정보 - 배열
System.out.println("생성자");
Constructor[] c = cls.getConstructors();
for(int i = 0; i<c.length;i++) {
System.out.println(c[i]);
}
//필드 (=변수)
System.out.println("필드");
Field[] f = cls.getFields();
for(int i = 0; i<f.length;i++) {
System.out.println(f[i]);
}
//메서드
System.out.println("메서드");
Method[] m = cls.getMethods();
for(int i = 0; i<m.length;i++) {
System.out.println(m[i]);
}
} catch (Exception e) {
}
}
}
클래스명[java.lang.String] :
java.util.Scanner
생성자
public java.util.Scanner(java.io.InputStream,java.nio.charset.Charset)
public java.util.Scanner(java.io.InputStream,java.lang.String)
public java.util.Scanner(java.io.InputStream)
.
.
.
📌 Note Code
Test5
💻 입력
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//정규화표현식
public class Test5 {
public static void main(String[] args) {
String[] str = {"bat","baby","bonus","c","cA","ca","c.","c0",
"car","combat","count","date","disc"};
Pattern p;
p = Pattern.compile("c[a-z]*");
for (String s : str) {
Matcher m = p.matcher(s);
if (m.matches()) {
System.out.println(s);
}
}
System.out.println("------------------------");
p = Pattern.compile("c[a-z]+"); // 하나이상의 문자
for (String s : str) {
Matcher m = p.matcher(s);
if (m.matches()) {
System.out.println(s);
}
}
System.out.println("------------------------");
p = Pattern.compile("c.+"); // 하나이상의 문자
for (String s : str) {
Matcher m = p.matcher(s);
if (m.matches()) {
System.out.println(s);
}
}
System.out.println("------------------------");
String[] mail = {"aaa@aaa.com","@@aaa.co.kr",
".@bbb.com", "aaa@vvv.vo.kr","sss.co.kr",
"abc@abc"};
// [\\w]+ : 한글자 이상의 영,숫자
// (\\.[\\w]+) : 괄호안에 있는 것은 반드시 한번은 사용해야함
// \\. : 도트는 반드시 와야함
String pat = "[\\w]+@[\\w]+(\\.[\\w]+)+";
for(String ss : mail) {
if(Pattern.matches(pat, ss)) {
System.out.println(ss);
}
}
}
}
c
ca
car
combat
count
------------------------
ca
car
combat
count
------------------------
cA
ca
c.
c0
car
combat
count
------------------------
aaa@aaa.com
aaa@vvv.vo.kr
📌 Note Code

Test6
💻 입력
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test6 {
public static String replaceAll(String str, String oldStr, String newStr) {
// String데이터 비교할때 기본적으론 equals인데 null을 비교할땐 == 을 써도됨
if (str == null) {
return null;
}
Pattern p = Pattern.compile(oldStr);
Matcher m = p.matcher(str); // oldStr을 입력한 p를 str에 매치한다
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, newStr); // 새로운 단어인 newstr을 찾는다
}
m.appendTail(sb); //대한으로만 끝나지않고 뒤에 나머지 내용들이 붙음
return sb.toString();
}
public static void main(String[] args) {
String str = "우리나라 대한민국 대한독립만세 대한의 건아";
String s = Test6.replaceAll(str,"대한","大韓"); //static으로 만들었으니까 Test6.으로 바로 찾을 수 있음
System.out.println(s);
}
}
우리나라 大韓민국 大韓독립만세 大韓의 건아
📌 Note Code
Test7
💻 입력
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetAddress;
public class Test7{
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String host;
System.out.println("호스트[www.naver.com]?: ");
host = br.readLine();
InetAddress ia = InetAddress.getByName(host);
System.out.println("ip주소: "+ia.getHostAddress());
System.out.println("호스트 : "+ia.getHostName());
// http://www.naver.com
// http : 프로토콜 (protocol - 통신규약) , FTP(인터넷에서 다운),SMTP(메일 보낼때),POP3(메일 받을때),NNTP
// hyper text transfer protocol
// naver.com : domain 도메인
// www : host domain 호스트 도메인 - World Wide Web - 거미줄
// DNS : 도메인 이름 시스템` / 도메인 이름과 IP 주소를 서로 변환하는 역할 / 웹에서 도메인을 정리하고 확인하는 전화번호부와 같은 역할 / 주소를 분해
//10진수 (사람이 이해할 수 있는 숫자) : 192.168.16.0 등
//IPV40 - 32bit
// 0~2555 : 000000000.00000000. ~ [255나누기 2진수로 하면] 11111111. 1*8 . 1*8 .1*8 = 8*4 =32 (bit)
//IPV6 - 286bit
}
}
호스트[www.naver.com]?:
www.naver.com
ip주소: 223.130.195.200
호스트 : www.naver.com
📌 Note Code

Test8
💻 입력
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
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.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
//소스를 볼 수 있는 창 frame 만들기
public class Test8 extends Frame implements ActionListener{
private static final long serialVersionUID = 1L;
private TextArea ta;
private TextField tf;
public Test8() {
ta = new TextArea();
add(ta);
tf = new TextField();
tf.addActionListener(this);
add(tf,BorderLayout.NORTH);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setTitle("HTML Viewer");
setSize(400, 300);
setVisible(true);
}
public static void main(String[] args) {
new Test8();
}
@Override
public void actionPerformed(ActionEvent e) {
try {
String str;
URL url = new URL(tf.getText()); //입력한 주소를 읽어서 url로 넘어옴
ta.setText(""); //데이터를 새로운거 입력하기위해서 초기화
InputStream is = url.openStream(); //url에 찾아가서 도메인을 찾고 -> ip를 찾겠지? 그 다음 openStream 통로를 통해 is내용을 boderlayout에 넣음
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while((str=br.readLine())!=null){
if(ta.getText().equals("")){ //아무것도 없고 처음 딱 쓸 때
ta.setText(str); //textarea에 str를 입력하고
}else {
ta.setText(ta.getText()+"\r\n"+str); // i=i+1
}
}
is.close();
} catch (Exception e2) {
}
}
}
[그림참고]