빅데이터교육과정/JAVA
DAY13. 네트워크 통신(TCP, 유니캐스트)
Listeria
2021. 2. 23. 02:54
import java.io.*;
import java.net.*;
public class EchoClient {
private String ip;
private int port;
private String str;
BufferedReader file;
public EchoClient(String ip, int port) throws IOException {
this.ip = ip;
this.port = port;
Socket tcpSocket = getSocket();
OutputStream os_socket = tcpSocket.getOutputStream();
InputStream is_socket = tcpSocket.getInputStream();
BufferedWriter bufferW = new BufferedWriter(new OutputStreamWriter(os_socket));
BufferedReader bufferR = new BufferedReader(new InputStreamReader(is_socket));
System.out.print("입력 : ");
file = new BufferedReader( new InputStreamReader(System.in));
str = file.readLine();
str += System.getProperty("line.separator");
bufferW.write(str);
bufferW.flush();
str = bufferR.readLine();
System.out.println("Echo Result : " + str);
file.close();
bufferW.close();
bufferR.close();
tcpSocket.close();
}
public Socket getSocket() {
Socket tcpSocket = null;
try {
tcpSocket = new Socket(ip, port);
} catch (IOException ioe) {
ioe.printStackTrace();
System.exit(0);
}
return tcpSocket;
}
public static void main(String[] args) throws IOException {
new EchoClient("localhost", 3000);
}
}
import java.net.*;
public class InetEx {
public static void main(String[] args) throws UnknownHostException{
InetAddress iaddr = InetAddress.getLocalHost();
System.out.printf("host name : %s %n",iaddr.getHostName());
System.out.printf("host ip :%s %n ", iaddr.getHostAddress());
iaddr = InetAddress.getByName("www.naver.com");
System.out.printf("host name : %s %n",iaddr.getHostName());
System.out.printf("host ip :%s %n ", iaddr.getHostAddress());
InetAddress sw[] = InetAddress.getAllByName("df.nexon.com");
for(InetAddress temp_sw:sw) {
System.out.printf("host name : %s %n",temp_sw.getHostName());
System.out.printf("host ip :%s %n ", temp_sw.getHostAddress());
}
}
}
import java.io.*;
import java.net.*;
public class EchoServer{
private BufferedReader bufferR;
private BufferedWriter bufferW;
private InputStream is;
private OutputStream os;
private ServerSocket serverS;
public EchoServer(int port){
try{
serverS = new ServerSocket(port);
}catch(IOException ioe){
ioe.printStackTrace();
System.exit(0);
}
while(true){
try{
System.out.println("클라이언트의 요청을 기다리는 중");
Socket tcpSocket = serverS.accept();
System.out.println("클라이언트의 IP 주소 : "+
tcpSocket.getInetAddress().getHostAddress());
is = tcpSocket.getInputStream();
os = tcpSocket.getOutputStream();
bufferR = new BufferedReader(new InputStreamReader(is));
bufferW = new BufferedWriter(new OutputStreamWriter(os));
String message = bufferR.readLine();
System.out.println("수신메시지 : "+ message);
message += System.getProperty("line.separator");
bufferW.write(message);
bufferW.flush();
bufferR.close();
bufferW.close();
tcpSocket.close();
}catch(IOException ioe){
ioe.printStackTrace();
}
}
}
public static void main(String[] args){
new EchoServer(3000);
}
}
TCP 통신의 기본은 서버가 서버 소켓을 생성하고 클라이언트가 소켓을 만들어서 이 연결을 통해 통신이 이루어 지게 된다.
import java.io.*;
import java.net.*;
public class UnicastServer{
// private BufferedReader bufferR;
// private BufferedWriter bufferW;
// private InputStream is;
// private OutputStream os;
private ServerSocket serverS;
Socket s;
public UnicastServer(int port){
try{
serverS = new ServerSocket(port);
}catch(IOException ioe){
ioe.printStackTrace();
System.exit(0);
}
while(true) {
System.out.println("client ready");
try {
s = serverS.accept();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("client ip "+s.getInetAddress().getHostAddress());
UnicastServerThread ust = new UnicastServerThread(s);
Thread Uni = new Thread(ust);
Uni.start();
}
}
public static void main(String[] args){
new UnicastServer(3000);
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class UnicastServerThread implements Runnable{
private BufferedReader bufferR;
private BufferedWriter bufferW;
private InputStream is;
private OutputStream os;
Socket tcpSocket;
public UnicastServerThread(Socket s){
tcpSocket = s;
}
public void outThread() {
boolean isStop = false;
while(!isStop) {
try{
os = tcpSocket.getOutputStream();
is = tcpSocket.getInputStream();
bufferR = new BufferedReader(new InputStreamReader(is));
bufferW = new BufferedWriter(new OutputStreamWriter(os));
}catch(IOException ioe){
ioe.printStackTrace();
isStop=true;
}
try {
while(!isStop) {
String message = bufferR.readLine();
System.out.println("수신메시지 : "+ message);
message += System.getProperty("line.separator");
bufferW.write(message);
bufferW.flush();
}
}catch(IOException ioe){
System.out.println("End2");
isStop=true;
}
finally {
try {
bufferR.close();
bufferW.close();
tcpSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void run() {
outThread();
}
}
import java.io.*;
import java.net.*;
public class UnicastClient {
private String ip;
private int port;
private String str;
BufferedReader file=null;
BufferedWriter bufferW=null;
BufferedReader bufferR;
public UnicastClient(String ip, int port) throws IOException {
Socket tcpSocket;
OutputStream os_socket;
InputStream is_socket;
this.ip = ip;
this.port = port;
tcpSocket = getSocket();
boolean isStop=false;
os_socket = tcpSocket.getOutputStream();
is_socket = tcpSocket.getInputStream();
bufferW = new BufferedWriter(new OutputStreamWriter(os_socket));
bufferR = new BufferedReader(new InputStreamReader(is_socket));
while(!isStop) {
System.out.print("입력 : ");
file = new BufferedReader(new InputStreamReader(System.in));
str = file.readLine();
str += System.getProperty("line.separator");
bufferW.write(str);
bufferW.flush();
str = bufferR.readLine();
if(str.equals("exit")) {
isStop=true;
System.out.println("End" );}
else {
System.out.println("r.m : "+str); }
}
file.close();
bufferW.close();
bufferR.close();
tcpSocket.close();
}
public Socket getSocket() {
Socket tcpSocket = null;
try {
tcpSocket = new Socket(ip, port);
} catch (IOException ioe) {
ioe.printStackTrace();
System.exit(0);
}
return tcpSocket;
}
public static void main(String[] args) throws IOException {
new UnicastClient("localhost", 3000);
}
}
유니캐스트는 Tcp 소켓을 스레드를 통해 동작시켜 통신이 한번 이루어진뒤에 다시 통신을 이어갈 수 있다. 즉 클라이언트와 서버간에 지속적으로 통신이 유지되게 된다.