import java.io.*;
import java.net.*;
import java.util.Scanner;
class URLConEx {
public URLConEx() {
String code = null;
System.out.println("웹 주소를 입력하세요");
Scanner scan = new Scanner(System.in);
String address = scan.next();
try {
URL url = new URL(address);
URLConnection con = url.openConnection();
// 인터넷 연결이 되어있지 않으면 error catch
BufferedReader webData = new BufferedReader(new InputStreamReader(con.getInputStream()));
FileWriter fw = new FileWriter("C:\\Users\\USER\\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 JavaPractice {
public static void main(String[] args) {
new URLConEx();
}
}
[Console]
웹 주소를 입력하세요
(입력 >> ) https://www.daum.net
the end
- TCPServer.java
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer { // 1. 서버 프로그램 만들기
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(7777); // 포트 번호를 가진 객체 생성
socket = serverSocket.accept(); // 서버소켓을 받는다.
Sender sender = new Sender(socket);
Receiver receiver = new Receiver(socket);
sender.start();
receiver.start();
}
catch(Exception e) {}
}
}
- Sender.java (Thread)
import java.io.DataOutputStream;
import java.net.Socket;
import java.util.Scanner;
public class Sender extends Thread { // 2. Sender 만들기 - Thread 상속
Socket socket;
DataOutputStream out;
String name;
public Sender(Socket socket) {
this.socket = socket;
try {
out = new DataOutputStream(socket.getOutputStream()); // 소켓의 스트림으로 객체 생성
name = "[" + socket.getInetAddress() + ":" + socket.getPort() + "]"; // 소켓 이름
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
Scanner scan = new Scanner(System.in);
while (out != null) {
try {
out.writeUTF(name + scan.nextLine());
} catch (Exception e) {
}
}
}
}
- Receiver.java (Thread)
import java.io.DataInputStream;
import java.net.Socket;
public class Receiver extends Thread { // 3. Receiver 만들기 - Thread 상속
Socket socket;
DataInputStream in; // output을 input으로 바꾸기
public Receiver(Socket socket) {
this.socket = socket;
try {
in = new DataInputStream(socket.getInputStream()); // 소켓의 스트림으로 객체 생성
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (in != null) {
try {
System.out.println(in.readUTF());
} catch (Exception e) {
}
}
}
}
- TCPClient.java
import java.net.Socket;
public class TCPClient { // 4. 클라이언트 만들기
public static void main(String[] args) {
String serverIP = "127.0.0.1"; // Local Host (자기 자신)
try {
Socket socket = new Socket(serverIP, 7777); // 소켓 객체 생성(호스트, 서버 포트번호)
System.out.println("서버에 연결되었습니다.");
Sender sender = new Sender(socket);
Receiver receiver = new Receiver(socket);
sender.start();
receiver.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
[Client - Console]
서버에 연결되었습니다.
안녕하세요
[/127.0.0.1:57577]나도 되려나
ㅎㅎ
[Server - Console]
[/127.0.0.1:7777]안녕하세요
나도 되려나
[/127.0.0.1:7777]ㅎㅎ
[Console]
안녕하세요
보이시나[/192.168.0.125:7777]안녕하세요
요
[/192.168.0.125:7777]\
[/192.168.0.125:7777]네 잘보여요
[/192.168.0.125:7777]감사합니디ㅏ
ServerSocket 클래스 >> accept()
public Socket accept() throws IOException {
if (isClosed())
throw new SocketException("Socket is closed");
if (!isBound())
throw new SocketException("Socket is not bound yet");
Socket s = new Socket((SocketImpl) null);
implAccept(s);
return s;
}
Sender, Receiver