본문 바로가기

공부/응용 SW

6월18일 - SW활용 네트워크

Server

- 요청을 받고 응답을 할 수 있는 시스템

- Web Server

  - 웹브라우저를 통해 웹서비스를 제공

웹브라우저 IIS MS기반 언어(ASP, 닷넷)  
  Tomcat JSP언어 / 무료 사이트 하나만 가능, 개인 홈페이지
  JBoss / Resin JSP언어 / 유료  
Linux 운영체제 기반   PHP언어 / 무료  

- Database Server

  - 대용량 저장 장소

  - 관계형 데이터베이스 (시험출제) - 빅데이터

    : Oracle DB, MySQL DB, Maria DB, MS-SQL DB, Orient DB, SQLite

  - No SQL 데이터베이스

    : Mongo DB, 카산드라

- Mail Server

 

소켓& serversocket

 : network패키지에 들어있음

- 소켓 (socket) : 네트워크 프로그래밍을 위한 인터페이스

- ServerSocket 

 

Client

- 요청하는 시스템 

 

예시 1) server->client 정보전달하기

 

server1

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

/*
실행순서 (명령프롬프트에서 테스트)
시작-> cmd
>d:
>cd java0514
>cd basicNetwork
>cd src
*/

public class Server1 {
	
	public static void main(String[] args) {
		//서버 구축
		
		//클라이언트보다 먼저 실행되어 클라이언트의 접속 요청을 기다리며, 
		//클라이언트가 접속하면 양방향 통신을 할 수 있는 Socket 객체를 생성합니다.
				
		ServerSocket server=null;
		try{
			//port번호 server통하는 전용문 0~65535
			//Server1 클래스만 사용하는 port번호 2019
			server = new ServerSocket(2019);
			//포트번호 기다림
			while(true){
				System.out.println("\n클라이언트 접속 대기중...");
				//다른 socket과 해당 포트의 데이터를 송수신합니다.
				Socket socket=server.accept();
				System.out.println("[접속]접속IP:"+socket.getInetAddress().getHostAddress());
				
				//요청한 사용자 PC에 메세지 출력
				BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
				writer.write("[운영자]/1.토이스토리/2.알라딘/3.기생충");
				writer.newLine(); //줄바꿈
				writer.flush();     //client에 전송
				
				
				socket.close(); //접속사 연결종료
			}//while end
		}catch(Exception e){
			System.out.println("서버문제발생 : "+e);
		}finally{
			//finally문 안에도 try문이 들어올 수 있다. 
			try{
				server.close(); //자원반납
			}catch(Exception e){}
			System.out.println("서버 프로그램 실행 종료!");
		}//try end
		
	}//main() end
}//class end

 

Server - cmd창

SERVER 클래스는 클라이언트에게 주기 위해 만든 서버구축하기

 

서버 프로그램 실행종료! 가 뜬 이유는 이클립스에서도 실행이 되고 있어서 에러가 발생한 것이다.

이클립스를 끈 후 다시 실행하니 클라이언트 접속 대기중.. 이라고 뜨며 제대로 실행되었다. 

 

client1

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;

/*
    실행순서(명령프롬포트에서 테스트)
    시작->cmd
    >d:
    >cd java0514
    >cd workspace
    >cd basicNetwork
    >javac Client1.java
    >java Client1 요청서버IP
 */

public class Client1 {
	
	public static void main(String[] args) {
		//클라이언트 구축
		Socket socket=null;
		try{
			//>java Client1 172.16.83.100
			socket=new Socket(args[0], 2019); //args : 서버ip , 2019 : port번호
			System.out.println("[접속]서버IP:"+socket.getInetAddress().getHostAddress());
			BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			String line=reader.readLine();
			String[] movie=line.split("/");
			System.out.println("----------------------");
			for(int idx=0; idx<movie.length; idx++){
				System.out.println(movie[idx]);
			}//for end
			System.out.println("----------------------");
		}catch(Exception e){
			System.out.println("클라이언터 문제발생:"+e);
		}finally{
			try{
				socket.close(); //자원반납
			}catch(Exception e){}
			System.out.println("서버 프로그램 실행 종료!");
		}//try end
		
	}//main() end
}//class end

 

Client - cmd창

 

1. >java Server1 

2. 

 

예시 2) client->server 정보전달하기 

 

server2

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server2 {

	public static void main(String[] args) {
		//2) 클라이언트가 서버 측에 메세지 전송
		//-> Server2.java와 Client2.java
		
		ServerSocket server=null;
		
		try{
			server = new ServerSocket(2020);
			System.out.println("\n클라이언트 접속 대기중...");
			
			while(true){
				Socket socket=server.accept();
				System.out.println("[접속]서버IP:"+socket.getInetAddress().getHostAddress());				
				
				BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
				String line=reader.readLine();
				String[] str=line.split("/");
				System.out.println("----------------------");
				for(int idx=0; idx<str.length; idx++){
					System.out.println(str[idx]);
				}//for end
				System.out.println("----------------------");
		
				try{
					socket.close(); //접속자 연결 종료
				}catch(Exception e) {}
			}//while end
		}catch(Exception e){
			System.out.println("서버문제발생:"+e);
		}finally{
			try{
				server.close();//자원반납	
			}catch(Exception e){}
				System.out.println("서버 프로그램 실행 종료!");
		}//try end
		
	}//main() end
}//class end

client2

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class Client2 {

	public static void main(String[] args) {
		// 클라이언트 구축
		Socket socket=null;
		try{
			socket = new Socket(args[0], 2020);
			System.out.println("[접속]접속IP:"+socket.getInetAddress().getHostAddress());
			BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
			writer.write("[간식]/1.사탕/2.초코렛/3.마카롱");
			writer.newLine(); //줄바꿈
			writer.flush();     //server에 전송
			
		}catch(Exception e){
			System.out.println("클라이언트 문제발생 : "+e);
		}finally{
			//finally문 안에도 try문이 들어올 수 있다. 
			try{
				socket.close(); //자원반납
			}catch(Exception e){}
				System.out.println("서버 프로그램 실행 종료!");
		}//try end
				
	}//main() end
}//class end

 

 


채팅프로그램만들기

 

1) Server 구축하기

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
//------------------------------------------------------------------------------------------------------------------------------------

class ChatClientRead extends Thread{
	private Socket socket; 
	private String line; 
	
	public ChatClientRead(){}
	public ChatClientRead(Socket socket){
		this.socket=socket;
	}
	@Override
	public void run() {
		try {
			BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream())); 
			while(true){
				line=reader.readLine(); //네트워크로부터 전송받음				
				if(line==null) break;
				System.out.println("\n"+line); //enter+line 출력
				System.out.println(" [운영자] ");
			}//while end
		}catch(Exception e){
			System.out.println("연결이 되어있지 않습니다."+e);
		}finally{
			try{
				socket.close();
			}catch(IOException e){ //입력exception
				e.printStackTrace();
			}
		}//try end
	}//run() end
} //class end 42행 
//------------------------------------------------------------------------------------------------------------------------------------

class ChatClientSend extends Thread{
	private Socket socket;
	private BufferedWriter writer;
	private BufferedReader in;
	private String str=""; //출력결과
	
	public ChatClientSend(){}
	public ChatClientSend(Socket socket){
		this.socket=socket;
	}
	@Override
	public void run() {
		try{
			writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
			in=new BufferedReader(new InputStreamReader(System.in));
			
			while(true){
				System.out.println(" [운영자] ");
				str=in.readLine(); 
				if(str.equals("exit")) break;
				writer.write(" [운영자] "+str);
				writer.newLine(); //줄바꿈 
				writer.flush();     //Server로 전송
			}//while end
			
		}catch(Exception e){
			System.out.println("데이터 전송 실패! :"+e);
		}finally{
			try{
				socket.close();
			}catch(IOException e){
				e.printStackTrace();
			}
		}//try end
	}//run() end
} //class end 45행
//------------------------------------------------------------------------------------------------------------------------------------

public class ChatClientThread {	
	private Socket socket=null;
	
	public void clientStart(String ip, int port){
		System.out.println("클라이언트 프로그램 작동...");
		try{
			socket=new Socket(ip,port);
			
			//socket으로부터 데이터를 읽어오는 쓰레드
			ChatClientRead read=new ChatClientRead(socket);
			read.start();
			
			//키보드에서 입력받아 socket으로 데이터를 보내는 쓰레드
			ChatClientSend send=new ChatClientSend(socket);
			send.start();
			
		}catch(Exception e){
			System.out.println("서버와 연결 실패:"+e);
		}finally{
			try{
				if(socket==null) socket.close();
			}catch(IOException e){
				e.printStackTrace();
			}
		}//try end
	}//clientStart() end
	
	public static void main(String[] args) {
		// 클라이언트 구축
		
		ChatClientThread cc=new ChatClientThread();
		cc.clientStart(args[0], 6901);
		
	}//main() end
}//class end

 

2) Client 구축하기

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
//------------------------------------------------------------------------------------------------------------------------------------

class ChatClientRead extends Thread{
	private Socket socket; 
	private String line; 
	
	public ChatClientRead(){}
	public ChatClientRead(Socket socket){
		this.socket=socket;
	}
	@Override
	public void run() {
		try {
			BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream())); 
			while(true){
				line=reader.readLine(); //네트워크로부터 전송받음				
				if(line==null) break;
				System.out.println("\n"+line); //enter+line 출력
				System.out.println(" [운영자] ");
			}//while end
		}catch(Exception e){
			System.out.println("연결이 되어있지 않습니다."+e);
		}finally{
			try{
				socket.close();
			}catch(IOException e){ //입력exception
				e.printStackTrace();
			}
		}//try end
	}//run() end
} //class end 42행 
//------------------------------------------------------------------------------------------------------------------------------------

class ChatClientSend extends Thread{
	private Socket socket;
	private BufferedWriter writer;
	private BufferedReader in;
	private String str=""; //출력결과
	
	public ChatClientSend(){}
	public ChatClientSend(Socket socket){
		this.socket=socket;
	}
	@Override
	public void run() {
		try{
			writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
			in=new BufferedReader(new InputStreamReader(System.in));
			
			while(true){
				System.out.println(" [운영자] ");
				str=in.readLine(); 
				if(str.equals("exit")) break;
				writer.write(" [운영자] "+str);
				writer.newLine(); //줄바꿈 
				writer.flush();     //Server로 전송
			}//while end
			
		}catch(Exception e){
			System.out.println("데이터 전송 실패! :"+e);
		}finally{
			try{
				socket.close();
			}catch(IOException e){
				e.printStackTrace();
			}
		}//try end
	}//run() end
} //class end 45행
//------------------------------------------------------------------------------------------------------------------------------------

public class ChatClientThread {
	private Socket socket=null;
	
	public void clientStart(String ip, int port){
		System.out.println("클라이언트 프로그램 작동...");
		try{
			socket=new Socket(ip,port);
			
			//socket으로부터 데이터를 읽어오는 쓰레드
			ChatClientRead read=new ChatClientRead(socket);
			read.start();
			
			//키보드에서 입력받아 socket으로 데이터를 보내는 쓰레드
			ChatClientSend send=new ChatClientSend(socket);
			send.start();
			
		}catch(Exception e){
			System.out.println("서버와 연결 실패:"+e);
		}finally{
			try{
				if(socket==null) socket.close();
			}catch(IOException e){
				e.printStackTrace();
			}
		}//try end
	}//clientStart() end
	
	public static void main(String[] args) {
		// 클라이언트 구축
		
		ChatClientThread cc=new ChatClientThread();
		cc.clientStart(args[0], 6901);
		
	}//main() end
}//class end

 

'공부 > 응용 SW' 카테고리의 다른 글

6월20일 - SW활용 Oracle  (0) 2019.06.20
6월19일 - SW활용 : DB  (0) 2019.06.19
6월17일 - SW활용 운영체제 + 네트워크(thread)  (0) 2019.06.17
6월13일 - DOS명령어 만들기  (0) 2019.06.13
6월12일 - properties + singleton  (0) 2019.06.12