서버구축하기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class mainClass {
public static void main(String[] args) {
/*
* TCP: Transmission Control Protocol
* 전송 제어 규약
*
* Server: TCP, DB, Web(tomcat) + Web Socket
*
* 종단 시스템: host
* 네트워크 상에서 더 연장되지 않는 기기
* PC, Smart Phone, PDA, Scanner, Printer
*
* Router: hardware
* host 간에 상호 데이터를 교환할 수 있도록 하는 장비
* inter Network : 포괄적인 통신
*
* TCP - 통신 제어 규약 동기 통신
* UDP - User Datagram Protocol 비동기 통신
*
* 7 Layer
* 1계층 - Physical layer 물리 계층
* 2계층 - Data Link layer 주소를 헤더에 첨부
* 3계층 - Network layer 네트워크 IP -> Address
* 4계층 - Transport layer 네트워크 Port
* 5계층 - Session layer 세션 부분을 동기화
* 6계층 - Presentation layer 보안, 압축, 확장
* 7계층 - Application layer 프로그램(소프트웨어)
*
* TCP
* 신사적인 Protocol
* 전화 -> 상대방 -> 연결 - > 통신 start
* 동기화 : 보낸다 -> 받는다 처리 순서가 일치해야 한다.
* 데이터의 경계가 없다.
* 1 대 1 통신만 가능하다.
* 채팅, Object(class)
*
* UDP
* 비 연결형 Protocol
* 편지, 지상파 방송
* 데이터의 경계가 있다.
* 1 대 1 통신 (unicast)
* 1 대 다 통신 (broadcast)
* 다 대 다 통신 (multicast)
*
* Packet(묶음)
* 제어정보, 데이터등이 결합된 형태로 전송이 되는 실제의 데이터
* IP, Port, String: 1001-홍길동-서울시
* Object: Dto
*
* IP : Internet Protocol = 주소
*
* IPv4 : xxx.xxx.xxx.xxx 0 ~ 255
* IPv6 : xxx.xxx.xxx.xxx.xxx.xxx
*
* 127.0.0.1 -> 자기 자신의 IP
*
*
* 0 ~ 1024까지는 시스템의 Port Number
*
* Port Number
* 프로그램당 프로세스가 1개이상일 수있으나 기본으로 1개
* IP 주소는 Internet에 존재하는 host(PC)를 식별할 수 있으나
* 촤종 주체인 프로세스(프로그램)를 식별 하지 못하기 떄문에
* 프로세스를 구별하기 위해서 지정된 수치 ( 0 ~ 1024 : sys)외의 숫자를 지정한다.
*
* Socket --> 유닉스(file)
* 통신의 주체. 통신을 하기 위한 Object
* IP, TCP/UDP
* 통신을 하기위해선 소켓을 알아야한다. 소켓은 IP주소를 가지고있다.
*
* 통신 순서
* Server Client
* 1. Socket버전 확인 1. Socket버전 확인
* 2. Binding -> IP, Port
* 3. Listen
* 4. Accept(Client 정보) <----------- 2. Connect
* 접속 성공!
* 1) recv(read) <----------- send(write)
* 2) send(write) ------------> recv(read)
*
* DNS(Domain Name System) Server
* IP -> String
*
*/
Socket clientSocket = null;
try {
//문지기 소켓
ServerSocket serverSocket = new ServerSocket(9000);
// 자동으로 자신의 IP를 설정, binding, listen 포함
// while(true) {
System.out.println("접속 대기중...");
clientSocket = serverSocket.accept();
// 담당자 소켓
//어떤 클라이언트의 IP
System.out.println("client IP:" + clientSocket.getInetAddress()
+ "Port:" + clientSocket.getPort());
// }
// clientSocket.close();
// serverSocket.close();
while(true) {
//1. recv
//문지기 소켓이 아니다
BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String str = reader.readLine();
System.out.println("클라이언트로 부터 받은 메시지 " + str);
// str = "반갑습니다";
//2. send
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
writer.println(str); //실질적으로 전송
writer.flush(); // 중요 끝맺음
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
클라이언트 부분
package main;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.Scanner;
public class mainClass {
public static void main(String[] args) {
/*
* 1. 접속을 해야할 Server IP(주소)를 설정 -Socket 2. Socket 생성 3. 접속 connect
*
* 4. packet 전송
*/
InetSocketAddress sockAddr = new InetSocketAddress("192.168.2.5", 9000);
// InetSocketAddress sockAddr = new InetSocketAddress("127.0.0.1", 9000);
// 클라이언트의 소켓은 하나만 있으면된다
Socket socket = new Socket();
Scanner scanner = new Scanner(System.in);
// Server 접속
try {
socket.connect(sockAddr, 10000);
//float k = 3.14f;
// double num = 3.14;
// byte su1 = 126;
// byte su2 = -12;
// (byte) res = su1 + sue2;
InetAddress inetAddr;
if ((inetAddr = socket.getInetAddress()) != null) {
System.out.println("서버 연결 성공 : " + inetAddr);
} else {
System.out.println("서버 연결 실패");
}
while(true) {
System.out.println("전송 문자열");
String str = scanner.next();
//1. send
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.println(str); //실질적으로 전송
writer.flush(); // 중요 끝맺음
//2. recv
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
str = reader.readLine();
System.out.println("서버로 부터 받은 메시지 " + str);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
'Java > java 기초' 카테고리의 다른 글
쓰레드 공부하기 (0) | 2019.12.10 |
---|---|
awt 로 채팅 프로그램 구현하기 (0) | 2019.12.10 |
awt - 이미지 올리기 (0) | 2019.12.06 |
awt로 가위바위보 프로그램 만들기 (0) | 2019.12.05 |
awt - 응용 (0) | 2019.12.05 |