-
Java - NetworkJava 2018. 2. 5. 12:31반응형// Networkimport java.net.InetAddress;import java.net.UnknownHostException;public class GetIP {public static void main(String[] args) throws UnknownHostException {// Get LocalHost IPInetAddress addr = InetAddress.getLocalHost();System.out.println(addr.getHostAddress());// Get Domain IPString domain = "www.sangmoo.xyz";addr = InetAddress.getByName(domain);System.out.println(addr.getHostAddress());// 특정 도메인에 여러 IP가 있을 경우domain = "www.youtube.com";InetAddress[] addrs = InetAddress.getAllByName(domain); // 여러 IP이기 때문에 []형식System.out.println(domain+" 에 연결된 IP들");for(InetAddress ip : addrs) {System.out.println(ip.getHostAddress());}}}// TCP는 연결 지향형이다. -> 소켓통신// 신호가 끊기면 이어서 간다.// 반면에 UDP는 중간에 끊기면 데이터를 버린다.import java.io.IOException;import java.net.InetSocketAddress;import java.net.ServerSocket;import java.net.Socket;public class Server {public static void main(String[] args) throws IOException {ServerSocket server =null;try {// 1. 소켓생성server = new ServerSocket();// 2. IP 개방server.bind(new InetSocketAddress("localhost", 9000));// 3. 클라이언트 요청 대기while(true) {System.out.println("요청 대기 중");// 4. 요청에 따른 실행 및 응답Socket socket = server.accept();/*해야 할 일 수행 - Client의 주소 확인*/InetSocketAddress addr= (InetSocketAddress) socket.getRemoteSocketAddress();System.out.println("Client 주소 확인 : "+addr.getAddress()+" : "+addr.getPort());}}catch (IOException e) {e.printStackTrace();// 5. 소켓 반납server.close();System.out.println("Server Close");}}}import java.io.IOException;import java.net.InetSocketAddress;import java.net.Socket;public class Client {public static void main(String[] args) throws IOException {// 1. 소켓 생성Socket socket = new Socket();// 2. 접속 요청try {socket.connect(new InetSocketAddress("localhost", 9000));// 3. 요청이 받아지면 작업 수행System.out.println("접속 완료");} catch (IOException e) {e.printStackTrace();}// 4. 소켓 반납socket.close();}}
* 에코 서버를 통해서 메세지를 보내고 받는 기능이 가능한지 판단 가능import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.InetSocketAddress;import java.net.ServerSocket;import java.net.Socket;public class Server {public static void main(String[] args) throws IOException {ServerSocket server = null;try {// 1. 소켓 생성server = new ServerSocket();// 2. IP 개방server.bind(new InetSocketAddress("localhost",9000));// 3. 요청 대기while(true) {System.out.println("요청 대기 중");// 4. 접속 요청 수락Socket socket = server.accept();System.out.println("접속 수락");// 5. is와 os준비InputStream is = socket.getInputStream();OutputStream os = socket.getOutputStream();InputStreamReader reader = new InputStreamReader(is);OutputStreamWriter writer = new OutputStreamWriter(os, "utf-8");// 6. is와 os로 데이터 주고 받기// int data; // EOF가 없기 때문에 무한 루프가 된다.// while((data = reader.read()) != -1) {// System.out.print(data);// writer.write(data);// }// 방법 1 - 큰 배열 하나로 받아내는 방법char[] arr= new char[20];reader.read(arr); // while문이 없으므로 단 한번만 받아온다.String msg = new String(arr);System.out.println("받은 메세지 : "+msg);writer.write(msg);// // 방법 2 - EOF 대신 특정 문자로 대체 하는 방법// char data;// while(true) {// data = (char) reader.read();// System.out.print(data);// writer.write(data);// if(data == '~') {// break;// }// }// char[] b = new char[1024];// while(reader.read(b) != -1) {// System.out.print("Client : "+b);// writer.write(b);// }writer.flush();System.out.println("전송 완료");// 7. 자원 반납is.close();os.close();reader.close();writer.close();}} catch (IOException e) {e.printStackTrace();// 7. 자원 반납server.close();}}}import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.InetSocketAddress;import java.net.Socket;public class Client {public static void main(String[] args) throws IOException {// 1. 소켓 생성Socket socket = new Socket();// 2. 접속 요청try {socket.connect(new InetSocketAddress("localhost", 9000));System.out.println("연결 완료");OutputStream os = socket.getOutputStream();OutputStreamWriter writer = new OutputStreamWriter(os, "utf-8");// 4. 데이터 전송String msg = "Hello, Server";writer.write(msg);writer.flush();System.out.println("전송 완료");// 5. 데이터 수신InputStream is = socket.getInputStream();InputStreamReader reader = new InputStreamReader(is);char[] arr = new char[20];reader.read(arr);String reply = new String(arr);System.out.println("받은 메세지 : " + msg);writer.write(reply);// 6. 자원 반납is.close();os.close();reader.close();} catch (IOException e) {e.printStackTrace();} finally {socket.close();}}}반응형'Java' 카테고리의 다른 글
Java - Network, MultiChat (0) 2018.02.06 Java - Network - Chat (0) 2018.02.06 Java - Stream IO (0) 2018.02.02 Java - File I/O (0) 2018.02.01 Java - Java I/O (0) 2018.02.01 댓글