47일차 java 연산(2023-02-28)

권단비·2023년 2월 28일
0

IT

목록 보기
89/139

[Eclipse 연습]

[계산]
//data.txt를  console 화면에 뿌리도록 하시오.
package ThreadTest;
import java.io.*;
public class Test3 {
	public static void main(String[] args) throws IOException {
		Reader in = new FileReader("data.txt");
		int dat = in.read();
		in.close();
		System.out.println(dat);
	}
}
[결과값]
50

[계산]
package ThreadTest;
public class Test4 {
	public static void main(String[] args) {
		Thread3 th1 = new Thread3();
		Thread4 th2 = new Thread4();
		th1.start();
		th2.start();
	}
}
class Thread3 extends Thread {
	public void run() {
		for (int i = 0; i < 300; i++)
			System.out.printf("%s", new String("-"));
	}
}
class Thread4 extends Thread {
	public void run() {
		for (int i = 0; i < 300; i++)
			System.out.printf("%s", new String("|"));
	}
}
[결과값]
|||----------------------------------------------------------------------------------|||||||||||||||||--------------------------------------------------------------------------------------------------------------------------------------------------------|||||||||||||||||||||||||||||||-----------------------------------|||||||||||||||||||||||||||||||----||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||---------------------------||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

[URLConnection]

한 번에 하나의 쓰레드만 객체에 접근할 수 있도록 객체에 락(lock)을 걸어서 데이터의 일관성을 유지하는 것.

[계산]
package ThreadTest;
import java.io.*;
import java.net.*;
import java.util.*;
class URLConEX {
	public URLConEX() {
		String code = null;
		System.out.println("웹 주소를 입력 하세요.");
		Scanner scanner = new Scanner(System.in);
		String address = scanner.next();
		// https://www.naver.com/
		try {
			URL url = new URL(address);
			URLConnection con = url.openConnection();
			BufferedReader webData = new BufferedReader(new InputStreamReader(con.getInputStream()));
			FileWriter fw = new FileWriter("C:\\Users\\USER\\Documents\\file.html", false);

			while ((code = webData.readLine()) != null) {
				fw.write(code);
			}
			System.out.println("The End");

			fw.close();
			webData.close();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
public class URLCon {
	public static void main(String[] args) {
		new URLConEX();
	}
}
[결과값]
웹 주소를 입력 하세요.
https://www.naver.com/
The End

*네이버의 페이지 소스를 가져온다.


[Socket]

네트워크상에서 서로 다른 호스트 사이의 통신을 위한 수단(전화기)
Socket(server) ← I/O Stream → Socket(client)

Server : 다수를 기다리는 쪽
Client : Server에 접속하는 쪽
UTF : 유니코드를 읽어오는 것

[1:1 채팅코드]

[TCPClient : 접속]
import java.net.*;
public class TCPClient {
	public static void main(String[] args) {
		String serverIP = "127.0.0.1"; // local host(자기자신)
		try {
			Socket socket = new Socket(serverIP, 2400); // 2400번으로 전화거는 것

			System.out.println("서버에 연결되었습니다.");

			Sender sender = new Sender(socket);
			Receiver receiver = new Receiver(socket);

			sender.start();
			receiver.start();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
=======================================================================================
[TCPServer : 다수를 기다림]
import java.net.*;
public class TCPServer {
	public static void main(String[] args) {
		ServerSocket serverSocket = null; // server 번호
		Socket socket = null;

		try {
			serverSocket = new ServerSocket(2400); // port 번호
			socket = serverSocket.accept(); // 상대방의 socket을 받아내는 것

			Sender sender = new Sender(socket);
			Receiver receiver = new Receiver(socket);

			sender.start();
			receiver.start();

		} catch (Exception e) {
		}
	}
}
=======================================================================================
[Sender : 보내기]
import java.io.*;
import java.net.*;
import java.util.*;
public class Sender extends Thread {
	Socket socket;
	DataOutputStream out;
	String name;

	public Sender(Socket socket) {
		this.socket = socket;
		try {
			out = new DataOutputStream(socket.getOutputStream()); // socket 안에 빨대가 있다.
			name = "[" + socket.getInetAddress() + ":" + socket.getPort() + "]";
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public void run() {
		Scanner sc = new Scanner(System.in);
		while (out != null) {
			try {
				out.writeUTF(name + sc.nextLine());
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}
=======================================================================================
[Receiver : 받기]
import java.io.*;
import java.net.*;
import java.util.*;
public class Receiver extends Thread {
	Socket socket;
	DataInputStream in;

	public Receiver(Socket socket) {
		this.socket = socket;
		try {
			in = new DataInputStream(socket.getInputStream()); // socket 안에 빨대가 있다.
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public void run() {
		while (in != null) {
			try {
				System.out.println(in.readUTF());
				// UTF : 유니코드를 읽어오겠다.
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}
[결과값]
[클라이언트]
서버에 연결되었습니다.
클라이언트
[하이픈]: 서버

[서버]
[하이픈]: 클라이언트
서버


0개의 댓글