26. 네트워크 프로그래밍

네트워크 프로그래밍
  • 26.01_네트워크 프로그래밍(네트워크 프로그래밍 개요)(이해)
  • 26.02_네트워크 프로그래밍(네트워크 프로그래밍의 세 가지 요소의 IP 개술)(파악)
  • 26.03_네트워크 프로그래밍(네트워크 프로그래밍 3요소의 포트 번호 개술)(파악)
  • 26.04_네트워크 프로그래밍(네트워크 프로그래밍 3요소 프로토콜)(장악)
  • 26.05_네트워크 프로그래밍(Socket 통신 원리 도해)(이해)
  • 26.06_네트워크 프로그래밍(UDP 전송)(이해)
  • 26.07_네트워크 프로그래밍(UDP 전송 최적화)
  • 26.08_네트워크 프로그래밍(UDP 전송 다중 스레드)
  • 26.09_네트워크 프로그래밍(UDP 채팅 그래픽 인터페이스)
  • 26.10_네트워크 프로그래밍(UDP 채팅 전송 기능)
  • 26.11_네트워크 프로그래밍(UDP 채팅 기록 기능)
  • 26.12_네트워크 프로그래밍(UDP 채팅 화면 정리)
  • 26.13_네트워크 프로그래밍(UDP 채팅 진동 기능)
  • 26.14_네트워크 프로그래밍(UDP 채팅 단축키 및 코드 최적화)
  • 26.15_네트워크 프로그래밍(UDP 채팅 생성jar 파일)
  • 26.16_네트워크 프로그래밍(TCP 프로토콜)
  • 26.17_네트워크 프로그래밍(TCP 프로토콜 코드 최적화)
  • 26.18_네트워크 프로그래밍(서버는 다중 루틴) (장악)
  • 26.19_네트워크 프로그래밍(연습)
  • 26.20_네트워크 프로그래밍(연습)
  • 26.01_네트워크 프로그래밍(네트워크 프로그래밍 개요)(이해)
  • A:컴퓨터 네트워크
  • 은 지리적 위치가 다른 독립된 기능을 가진 여러 대의 컴퓨터와 외부 설비를 통신선을 통해 연결하여 네트워크 운영체제, 네트워크 관리 소프트웨어와 네트워크 통신 프로토콜의 관리와 조율 아래 자원 공유와 정보 전달을 실현하는 컴퓨터 시스템을 말한다.

  • B:네트워크 프로그래밍
  • 는 네트워크가 서로 연결되는 서로 다른 컴퓨터에서 실행되는 프로그램 간에 데이터 교환을 할 수 있는 것이다.


  • 26.02_네트워크 프로그래밍(네트워크 프로그래밍의 세 가지 요소의 IP 개술)(파악)
  • 디바이스당 네트워크에 고유한 ID
  • 모든 네트워크 단말기는 네트워크에 하나의 독립된 주소를 가지고 우리가 네트워크에서 데이터를 전송하는 것은 바로 이 주소를 사용하는 것이다.
  • ipconfig: 네이티브 IP192.168.12.42
  • ping: 테스트 연결 192.168.40.62
  • 로컬 루프 주소: 127.0.0.1 255.255.255.255는 브로드캐스트 주소
  • IPv4: 4바이트, 4바이트 0-255.약 42억, 30억은 북미, 아시아에서 4억입니다.2011년 초 소진됐습니다.
  • IPv6:8 그룹, 그룹당 4개의 16진수.
  • 1a2b:0000:aaaa:0000:0000:0000:aabb:1f2f
  • 1a2b::aaaa:0000:0000:0000:aabb:1f2f
  • 1a2b:0000:aaaa::aabb:1f2f
  • 1a2b:0000:aaaa::0000:aabb:1f2f
  • 1a2b:0000:aaaa:0000::aabb:1f2f

  • 26.03_네트워크 프로그래밍(네트워크 프로그래밍 3요소의 포트 번호 개술)(파악)
  • 장치별 프로그램 고유 ID
  • 모든 네트워크 프로그램은 하나의 포트 번호를 연결해야 한다. 데이터를 전송할 때 어느 기계에 보낼지 확인하는 것 외에 어느 프로그램에 보낼지 명확하게 해야 한다.
  • 포트 번호 범위: 0-65535
  • 네트워크 응용 프로그램을 작성하려면 포트 번호를 연결해야 한다. 가능한 1024 이상을 사용하고 1024 이하는 기본적으로 시스템 프로그램에 의해 점용된다.
  • 일반 포트
  • mysql: 3306
  • oracle: 1521
  • web: 80
  • tomcat: 8080
  • QQ: 4000
  • feiQ: 2425


  • 26.04_네트워크 프로그래밍(네트워크 프로그래밍 3요소 프로토콜)(파악)
  • 컴퓨터 네트워크에서 데이터 교환을 위한 규칙, 표준 또는 약정의 집합.
  • UDP
  • 연결이 없고 데이터가 안전하지 않으며 속도가 빠릅니다.클라이언트와 서버를 구분하지 않습니다.

  • TCP * 연결용(3회 핸드셰이크)으로 데이터가 안전하고 속도가 약간 낮습니다.클라이언트와 서버로 나뉜다.
  • 세 번의 악수: 클라이언트가 먼저 서버에 요청을 하고 서버가 요청에 응답하며 데이터를 전송한다

  • 26.05_네트워크 프로그래밍(Socket 통신 원리 도해)(이해)
  • A:Socket 소켓 개요:
  • 네트워크에 유일한 표지가 있는 IP 주소와 포트 번호를 조합해야만 유일하게 식별할 수 있는 표지부 소켓을 구성할 수 있다.
  • 통신의 양 끝에 Socket이 있습니다.
  • 인터넷 통신은 사실 소켓 간의 통신이다.
  • 데이터는 두 Socket 간에 IO 스트림을 통해 전송됩니다.
  • Socket은 응용 프로그램에서 만들어지고 귀속 메커니즘을 통해 드라이버와 관계를 맺어 해당하는 IP와port를 알려준다.


  • 26.06_네트워크 프로그래밍(UDP 전송)(이해)
  • 1.Send 보내기
  • DatagramSocket 생성, 랜덤 포트 번호
  • DatagramPacket 생성, 데이터, 길이, 주소, 포트
  • 지정
  • DatagramSocket을 사용하여 DatagramPacket
  • 전송
  • DatagramSocket
  • 종료
  • 2.Receive 수신
  • DatagramSocket 생성, 포트 번호 지정
  • DatagramPacket 생성, 배열 지정, 길이
  • DatagramSocket으로 DatagramPacket 수신
  • DatagramSocket
  • 종료
  • DatagramPacket에서 데이터 가져오기
  • 3.수신자가 IP와 포트 번호를 가져오다
  • String ip = packet.getAddress().getHostAddress();
  • int port = packet.getPort();


  • 26.07_네트워크 프로그래밍(UDP 전송 최적화)
  • 수신자 Receive
  •   DatagramSocket socket = new DatagramSocket(6666);						//  socket       
      DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);		//  packet        
      
      while(true) {
      	socket.receive(packet);												//    
      	byte[] arr = packet.getData();
      	int len = packet.getLength();
      	String ip = packet.getAddress().getHostAddress();
      	System.out.println(ip + ":" + new String(arr,0,len));
      }
    
  • 송신단 Send
      DatagramSocket socket = new DatagramSocket();		//  socket       
      Scanner sc = new Scanner(System.in);
      
      while(true) {
      	String str = sc.nextLine();
      	if("quit".equals(str))
      		break;
      	DatagramPacket packet = 							//  packet        
      			new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
      	socket.send(packet);			//  
      }
      socket.close();
    
  • 26.08_네트워크 프로그래밍(UDP 전송 다중 스레드)
  • A 송신 및 수신 완료
      public class Demo3_MoreThread {
    
      	/**
      	 * @param args
      	 */
      	public static void main(String[] args) {
      		new Receive().start();
      		
      		new Send().start();
      	}
      
      }
    
      class Receive extends Thread {
      	public void run() {
      		try {
      			DatagramSocket socket = new DatagramSocket(6666);					//  socket       
      			DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);	//  packet        
      			
      			while(true) {
      				socket.receive(packet);												//    
      				byte[] arr = packet.getData();
      				int len = packet.getLength();
      				String ip = packet.getAddress().getHostAddress();
      				System.out.println(ip + ":" + new String(arr,0,len));
      			}
      		} catch (IOException e) {
      			
      			e.printStackTrace();
      		}
      	}
      }
    
      class Send extends Thread {
      	public void run() {
      		try {
      			DatagramSocket socket = new DatagramSocket();		//  socket       
      			Scanner sc = new Scanner(System.in);
      			
      			while(true) {
      				String str = sc.nextLine();
      				if("quit".equals(str))
      					break;
      				DatagramPacket packet = 							//  packet        
      						new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
      				socket.send(packet);			//  
      			}
      			socket.close();
      		}  catch (IOException e) {
      			
      			e.printStackTrace();
      		}
      	}
      }
    
  • 26.09_네트워크 프로그래밍(UDP 채팅 그래픽 인터페이스)
    26.10_네트워크 프로그래밍(UDP 채팅 전송 기능)
    26.11_네트워크 프로그래밍(UDP 채팅 기록 기능)
    26.12_네트워크 프로그래밍(UDP 채팅 화면 정리)
    26.13_네트워크 프로그래밍(UDP 채팅 진동 기능)
    26.14_네트워크 프로그래밍(UDP 채팅 단축키 및 코드 최적화)
    26.15_네트워크 프로그래밍 (UDP 채팅 생성jar 파일)
    26.16_네트워크 프로그래밍(TCP 프로토콜)(장악)
  • 1.클라이언트
  • Socket 연결 서버 만들기(ip주소, 포트번호 지정) ip주소로 대응하는 서버 찾기
  • Socket의 getInputStream () 과 getOutputStream () 방법을 호출하여 서버와 연결된 IO 흐름
  • 을 가져옵니다
  • 입력 흐름은 서버 출력 흐름이 쓴 데이터를 읽을 수 있음
  • 출력 흐름은 서버에서 데이터를 쓸 수 있는 입력 흐름
  • 2.서비스 단말기
  • ServerSocket 생성(포트 번호 지정 필요)
  • ServerSocket의accept() 방법을 호출하여 클라이언트 요청을 받고 Socket
  • 을 받습니다.
  • Socket의 getInputStream () 과 getOutputStream () 방법을 호출하여 클라이언트와 연결된 IO 흐름 가져오기
  • 입력 흐름은 클라이언트의 출력 흐름이 쓴 데이터를 읽을 수 있다
  • 출력 흐름은 클라이언트에 데이터를 쓸 수 있는 입력 흐름

  • 26.17_네트워크 프로그래밍(TCP 프로토콜 코드 최적화)
  • 클라이언트
      Socket socket = new Socket("127.0.0.1", 9999);		//  Socket  ip      
      InputStream is = socket.getInputStream();			//     
      OutputStream os = socket.getOutputStream();			//     
      BufferedReader br = new BufferedReader(new InputStreamReader(is));
      PrintStream ps = new PrintStream(os);
      
      System.out.println(br.readLine());
      ps.println("       ");
      System.out.println(br.readLine());
      ps.println("    ");
      socket.close();
    
  • 서비스 포트
      ServerSocket server = new ServerSocket(9999);	//     
      Socket socket = server.accept();				//        
      InputStream is = socket.getInputStream();		//     
      OutputStream os = socket.getOutputStream();		//     
      
      BufferedReader br = new BufferedReader(new InputStreamReader(is));
      PrintStream ps = new PrintStream(os);
      
      ps.println("        ");
      System.out.println(br.readLine());
      ps.println("   ,      ");
      System.out.println(br.readLine());
      server.close();
      socket.close();
    
  • 26.18_네트워크 프로그래밍 (서버는 다중 루트) (파악)
    ServerSocket server = new ServerSocket(9999);	//     
    	while(true) {
    		final Socket socket = server.accept();				//        
    		new Thread() {
    			public void run() {
    				try {
    					BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    					PrintStream ps = new PrintStream(socket.getOutputStream());
    					ps.println("        ");
    					System.out.println(br.readLine());
    					ps.println("   ,      ");
    					System.out.println(br.readLine());
    					socket.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		}.start();
    	}
    }
    

    26.19_네트워크 프로그래밍(연습)
  • 클라이언트는 서버에 문자열(키보드 입력)을 쓰고 서버(다중 루틴)는 문자열을 반전해서 다시 쓰고 클라이언트는 반전된 문자열
  • 을 다시 읽는다.
    26.20_네트워크 프로그래밍(연습)
  • 클라이언트가 서버에 파일을 업로드
  • 좋은 웹페이지 즐겨찾기