

package ch02_byte;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class ByteOut {
public static void main(String[] args) throws IOException {
File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\FileTest");
if(path.exists() == false) {
path.mkdir();
}
// 폴더 위치, 파일명을 가지는 객체 생성
File mf = new File(path, "test.txt");
// 경로에 파일이 없으면 생성
// 예외전가를 시켜야함
if(mf.createNewFile()) { // 예외뜨면 throws 해주기
System.out.println(mf.getName() + " 파일 생성");
} else {
System.out.println(mf.getName() + " 중복 파일");
}
// 데이터 기록을 위한 통로 생성
// 데이터 전송 통로 생성
// 객체 생성 시 기록할 파일 위치를 가지는 객체가 필요함
// 통로 생성시 설정이 있음 default는 이어서 작성 ㄴㄴ 다시 씀 ㅇㅇ
// - 객체 생성시 true( 이어쓰기 ), false( 다시쓰기, default )
// Output
FileOutputStream fos = new FileOutputStream(mf, true);
// FileOutputStream fos = new FileOutputStream(mf);
String data = "안녕 나는 byte test 야 ㅋ\n";
// 다시 실행한다고 추가로 기록되지 않음
// byte단위이므로 String를 byte로 변환 : getBytes()
try {
byte[] wd = data.getBytes();
fos.write(wd);
} catch(Exception e){
e.printStackTrace();
} finally {
// 사용했던 통로 폐쇄 / 정상 예외 상관 없이 실행
fos.close();
}
}
}

package ch02_byte;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class ByteIn {
public static void main(String[] args) throws IOException {
File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\FileTest");
if (path.exists() == false) {
path.mkdir();
}
// 폴더 위치, 파일명을 가지는 객체 생성
File mf = new File(path, "test.txt");
// 경로에 파일이 없으면 생성
// 예외전가를 시켜야함
if (mf.createNewFile()) { // 예외뜨면 throws 해주기
System.out.println(mf.getName() + " 파일 생성");
} else {
System.out.println(mf.getName() + " 중복 파일");
}
// 데이터 전송 통로 생성 Input
FileInputStream fis = new FileInputStream(mf);
try {
// byte로 읽고 int로 반환
// 연속적으로 읽기 위해 while 문
while (true) {
int rd = fis.read();
// 더이상 읽을 값이 없으면 -1을 반환함
if (rd == -1)
break;
System.out.print((char)rd);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 사용 통로 폐쇄
fis.close();
}
}
}

package ch03_reader;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class ReaderOut {
public static void main(String[] args) throws IOException {
File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\FileTest");
if (path.exists() == false) {
path.mkdir();
}
// 폴더 위치, 파일명을 가지는 객체 생성
File mf = new File(path, "reader.txt");
// 경로에 파일이 없으면 생성
// 예외전가를 시켜야함
if (mf.createNewFile()) { // 예외뜨면 throws 해주기
System.out.println(mf.getName() + " 파일 생성");
} else {
System.out.println(mf.getName() + " 중복 파일");
}
// 데이터 전송 통로 생성
FileOutputStream fos = new FileOutputStream(mf);
// 데이터 타입별로 전송 / 버퍼로 처리
BufferedOutputStream bos = new BufferedOutputStream(fos);
// 타입별 변환
DataOutputStream dos = new DataOutputStream(bos);
// 단점 : 데이터 타입에 맞는 메소드를 사용해야 함
dos.writeInt(123);
dos.writeDouble(5.6);
// 한글로 쓰기
dos.writeUTF("buffered 데이터");
//통로 닫기
dos.close();
// 자바에서 처리되는 데이터 형태라 이런식으로 나옴
// txt >> {@ffffff buffered 데이터
}
}

package ch03_reader;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class ReaderIn {
public static void main(String[] args) throws IOException {
File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\FileTest");
if (path.exists() == false) {
path.mkdir();
}
// 폴더 위치, 파일명을 가지는 객체 생성
File mf = new File(path, "reader.txt");
// 경로에 파일이 없으면 생성
// 예외전가를 시켜야함
if (mf.createNewFile()) { // 예외뜨면 throws 해주기
System.out.println(mf.getName() + " 파일 생성");
} else {
System.out.println(mf.getName() + " 중복 파일");
}
// 데이터 전송 통로 생성
FileInputStream fis = new FileInputStream(mf);
// 데이터 타입별로 전송 / 버퍼로 처리
BufferedInputStream bis = new BufferedInputStream(fis);
// 타입별 변환
DataInputStream dis = new DataInputStream(bis);
// 단점 : 데이터 타입에 맞는 메소드를 사용해야 함
int ia = dis.readInt();
double dd = dis.readDouble();
String sd = dis.readUTF();
System.out.println(ia);
System.out.println(dd);
System.out.println(sd);
// 통로 닫기
dis.close();
}
}
reader.txt 중복 파일
123
5.6
buffered 데이터
package ch04_text;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class TextOut {
public static void main(String[] args) throws IOException {
File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\FileTest");
if (path.exists() == false) {
path.mkdir();
}
// 폴더 위치, 파일명을 가지는 객체 생성
File mf = new File(path, "sentence.txt");
// 경로에 파일이 없으면 생성
// 예외전가를 시켜야함
if (mf.createNewFile()) { // 예외뜨면 throws 해주기
System.out.println(mf.getName() + " 파일 생성");
} else {
System.out.println(mf.getName() + " 중복 파일");
}
// 데이터 전송 통로 생성
FileWriter fw = new FileWriter(mf);
// 한 번에 많은 데이터를 처리하기 위한 buffer 생성
BufferedWriter bw = new BufferedWriter(fw);
// 기록 시 문자열로 드로우 처리 해주는 printwriter
PrintWriter pw = null;
try {
pw = new PrintWriter(bw);
pw.println("문자열 처리를 편리하게 할 수 있음 ㅇㅋ?");
pw.println("완료");
} catch( Exception e ) {
e.printStackTrace();
} finally {
pw.close();
}
}
}

package ch04_text;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class TextIn {
public static void main(String[] args) throws IOException {
File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\FileTest");
if (path.exists() == false) {
path.mkdir();
}
// 폴더 위치, 파일명을 가지는 객체 생성
File mf = new File(path, "sentence.txt");
// 경로에 파일이 없으면 생성
// 예외전가를 시켜야함
if (mf.createNewFile()) { // 예외뜨면 throws 해주기
System.out.println(mf.getName() + " 파일 생성");
} else {
System.out.println(mf.getName() + " 중복 파일");
}
// 데이터 전송 통로 생성
FileReader fr = new FileReader(mf);
// 한 번에 많은 데이터를 처리하기 위한 buffer 생성
BufferedReader br = new BufferedReader(fr);
// 기록 시 문자열로 드로우 처리 해주는 printReader
try {
// 한 줄이 아닐 수 있기 때문에 while문 사용
while(true) {
String rd = br.readLine();
// 더이상 읽을 문자열이 없음 null값 반환
if(rd ==null) break;
System.out.println(rd);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
br.close();
}
}
}

package ch05_copy;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class BinaryCopy {
public static void main(String[] args) throws IOException {
// 원래의 내용을 가진 놈
File original = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\FileTest\\sentence.txt");
// 복사 해서 저장할 내용을 가질 객체 생성
File duplicate = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\CopyTest\\copy.txt");
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(original);
fos = new FileOutputStream(duplicate);
int data = 0;
while((data = fis.read()) != -1) {
fos.write((byte)data);
}
System.out.println(duplicate.getPath() + " 복사 완료");
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
// finally 실행코드도 try catch 가능
try {
fis.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

package ch06_Object;
import java.io.Serializable;
/*
* 직렬화
* - 객체 정보를 모아서 바이트 형태로 변환하는 것
*
*/
// 직렬화 자격을 획득하기 위해 'java.io.Serializable' 을 상속
public class Unit implements Serializable{
// 클래스에게 부여하게 되는 고유 넘버 >> 사용자가 강제 지정 가능
// serialVersionUID
// - 같은 class 인지 확인하는 직렬화 식별자
private static final long serialVersionUID =1L;
private String id;
private int lv;
public Unit(String id, int lv) {
this.id = id;
this.lv = lv;
}
@Override
public String toString() {
return "ID : " + id + " - LV : " + lv;
}
}
package ch06_Object;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class ObjectOut {
public static void main(String[] args) throws IOException {
File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\Test");
if (path.exists() == false) {
path.mkdir();
}
// 폴더 위치, 파일명을 가지는 객체 생성
File mf = new File(path, "unit.txt");
// 경로에 파일이 없으면 생성
// 예외전가를 시켜야함
if (mf.createNewFile()) { // 예외뜨면 throws 해주기
System.out.println(mf.getName() + " 파일 생성");
} else {
System.out.println(mf.getName() + " 중복 파일");
}
FileOutputStream fos = new FileOutputStream(mf);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ObjectOutputStream oos = null;
Unit unit = new Unit("u001", 10);
try {
oos = new ObjectOutputStream(bos);
oos.writeObject(unit);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(oos != null) oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

package ch06_Object;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
public class ObjectIn {
public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException {
File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\Test");
File mf = new File(path, "unit.txt");
FileInputStream fis = new FileInputStream(mf);
BufferedInputStream bis = new BufferedInputStream(fis);
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(bis);
Unit unit = (Unit)ois.readObject();
System.out.println(unit);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(ois != null) ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
ID : u001 - LV : 10
package ch07_fileQuiz;
import java.io.Serializable;
public class Member implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private String phone;
public Member(String name, String phone) {
this.name = name;
this.phone = phone;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "이름 : " + name + " - 전화번호 : " + phone;
}
}
package ch07_fileQuiz;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Scanner;
import ch06_Object.Unit;
/*
* - 전화번호 목록 파일로 부터 데이터 가져오기
* - ArrayList 에 저장해서 확인, 수정, 추가 기능
*/
// 해당 파일을 가져와서 배열에 담기
public class MemberManager {
private Scanner scanner = new Scanner(System.in);
private ArrayList<Member> list;
private File record;
public MemberManager() throws IOException {
list = new ArrayList<>();
File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\MemberData");
record = new File(path, "memberRecord.txt");
if (record.createNewFile()) {
System.out.println(record.getName() + " 파일 생성");
}
} // MemberManager()
// 회원 추가
public void insert() {
System.out.println("--- 회 원 추 가 ---");
System.out.print("이름 입력 > ");
String name = scanner.next();
Member man = findName(name);
if (man != null) {
System.out.println("사용중인 이름 입니다~");
return;
}
System.out.print("전화번호 입력 > ");
String phone = scanner.next();
list.add(new Member(name, phone));
System.out.println(name + "님이 추가 되었습니다..");
save();
} // insert()
// 회원 검색
public Member findName(String search) {
for (Member man : list) {
if (man.getName().equals(search))
return man;
}
return null;
} // fineName()
// 회원 삭제 : 이름으로 삭제
public void delete() {
System.out.println("--- 번호 삭제 ---");
System.out.print("이름 입력 > ");
String dname = scanner.next();
Member man = findName(dname);
if(man == null) {
System.out.println("이름을 찾을 수 없음 ");
return;
}
System.out.println(dname + " 찾음 디져따");
list.remove(man);
System.out.println(dname + " 이놈 삭제");
save();
} // delete()
// 회원 목록
public void view() {
System.out.println("--- 회 원 목 록 ---");
for(Member man : list) {
System.out.println(man);
}
System.out.println("회원수 : " + list.size());
} // view()
// #번호수정
public void cph(Member man) {
System.out.print("수정 할 번호 입력 > ");
String cphone = scanner.next();
man.setPhone(cphone);
}
// 회원 정보 수정
public void modify() {
System.out.println("--- 정보 수정 ---");
System.out.print("이름 입력 > ");
String mname = scanner.next();
Member man = findName(mname);
if(man ==null) {
System.out.println(mname + " 이놈 없음");
} else {
System.out.print("1. 이름 수정\n"
+ "2. 번호 수정\n"
+ ">>");
int select = scanner.nextInt();
switch(select) {
case 1:
System.out.print("수정 할 이름 입력 > ");
String cname = scanner.next();
man.setName(cname);
System.out.println("번호도 수정하시겠습니까?");
System.out.println("1. yes 2. no\n"
+ ">>");
select = scanner.nextInt();
switch(select) {
case 1:
cph(man);
break;
case 2:
return;
}
break;
case 2:
cph(man);
break;
default :
System.out.println("입력 오류");
}
save();
}
} // modify()
// 회원 정보 확인
public void confirm() {
System.out.println("--- 정보 확인 ---");
System.out.print("검색할 이름 > ");
String cname = scanner.next();
Member man = findName(cname);
if(man ==null) {
System.out.println(cname + " 임마 없음");
return;
}
System.out.println(man);
} // confirm()
// list 의 데이터를 파일로 저장
public void save() {
FileOutputStream fos = null;
BufferedOutputStream bos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream(record);
bos = new BufferedOutputStream(fos);
oos = new ObjectOutputStream(bos);
for (Member man : list) {
oos.writeObject(man);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (oos != null)
oos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println(record.getName() + " 저장 완료");
} // save()
// 파일의 데이터를 가져와서 list 에 저장
public void load() {
if(record.length() ==0) return;
if(list != null) list.clear();
FileInputStream fis = null;
BufferedInputStream bis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream(record);
bis = new BufferedInputStream(fis);
ois = new ObjectInputStream(bis);
while(true){
Member man = (Member)ois.readObject();
// readObject() 메소드가 읽을 데이터가 없으면 EOFException 발생
list.add(man);
}
} catch (EOFException e) {
try {
if(ois!= null) ois.close();
} catch (IOException e1) {
e1.printStackTrace();
}
} catch(Exception e) {
}
System.out.println(record.getName() + " 로드 성공");
} // load()
// 종료
public void end() {
System.out.println("- Program end -");
System.exit(0);
}
}
package ch07_fileQuiz;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Scanner;
import ch06_Object.Unit;
public class MemberMain {
public static void main(String[] args) throws IOException, ClassNotFoundException {
Scanner sc = new Scanner(System.in);
MemberManager manager = new MemberManager();
// private File path;
while (true) {
System.out.print("1. 추가 \n" + "2. 삭제 \n" + "3. 목록 \n" + "4. 수정 \n" + "5. 확인 \n" + "6. 저장\n" + "7. 불러오기 \n"
+ "0. 종료\n" + ">> ");
int select = sc.nextInt();
switch (select) {
case 1: // 추가
manager.insert();
break;
case 2: // 삭제
manager.delete();
break;
case 3: // 목록
manager.view();
break;
case 4: // 수정
manager.modify();
break;
case 5: // 확인
manager.confirm();
break;
case 6: // 저장
manager.save();
break;
case 7: // 불러오기 : 파일에 저장된 목록
manager.load();
break;
case 0: // 종료
manager.end();
break;
default:
System.out.println("입력 오류");
}
System.out.println();
} // while
}
}
package ch07_fileQuizT;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Scanner;
/*
* - 전화번호 목록 파일로 부터 데이터 가져와서 ArrayList 에 저장해서 확인, 수정, 추가 가능
*/
public class MemberManager {
private Scanner scanner = new Scanner(System.in);
private ArrayList<Member> list;
private File record;
public MemberManager() throws IOException {
list = new ArrayList<>();
File path = new File("C:\\Users\\Administrator\\Desktop\\Fintech\\java\\MemberDataT");
record = new File(path, "memberRecordT.txt");
if(record.createNewFile()) {
System.out.println(record.getName() + " 파일 생성");
}
load();
} // MemberManager()
// 회원 추가
public void insert() {
System.out.println("--- 회 원 추 가 ---");
System.out.print("이름 입력 > ");
String name = scanner.next();
Member man = findName(name);
if(man != null) {
System.out.println("사용중인 이름 입니다~");
return;
}
System.out.print("전화번호 입력 > ");
String phone = scanner.next();
list.add(new Member(name, phone));
System.out.println(name + "님이 추가 되었습니다..");
save();
} // insert()
// 회원 검색
public Member findName(String search) {
for(Member man : list) {
if(man.getName().equals(search))
return man;
}
return null;
} // fineName()
// 회원 삭제 : 이름으로 삭제
public void delete() {
System.out.println("--- 회 원 삭 제 ---");
System.out.print("삭제 이름 입력 > ");
String name = scanner.next();
Member man = findName(name);
if(man == null) {
System.out.println("검색 실패~");
return;
}
list.remove(man);
System.out.println(name + " 삭제");
save();
} // delete()
// 회원 목록
public void view() {
System.out.println("--- 회 원 목 록 ---");
for(Member man : list) {
System.out.println(man);
}
System.out.println("회원수 : " + list.size());
} // view()
// 회원 정보 수정
public void modify() {
System.out.println("--- 회 원 수 정 ---");
System.out.print("수정 이름 입력 > ");
String name = scanner.next();
for(Member man : list) {
if(man.getName().equals(name)) {
System.out.println("현재 전화번호 : " + man.getPhone());
System.out.print("변경 전화번호 입력 > ");
String phone = scanner.next();
man.setPhone(phone);
System.out.println(name + " 님의 전화번호가 변경 되었습니다~");
save();
return;
}
}
System.out.println("수정 실패~");
} // modify()
// 회원 정보 확인
public void confirm() {
System.out.println("--- 회원정보 확 인 ---");
System.out.print("검색 이름 입력 > ");
String name = scanner.next();
Member man = findName(name);
if(man != null) {
System.out.println(man);
} else {
System.out.println("없는 회원 입니다..");
}
} // confirm()
// list 의 데이터를 파일로 저장
public void save() {
FileOutputStream fos = null;
BufferedOutputStream bos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream(record);
bos = new BufferedOutputStream(fos);
oos = new ObjectOutputStream(bos);
for(Member man : list) {
oos.writeObject(man);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(oos != null) oos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println(record.getName() + " 저장 완료");
} // save()
// 파일의 데이터를 가져와서 list 에 저장
public void load() {
if(record.length() == 0) return; // 파일에 기록된 데이터가 없으면 종료
if(list != null)
list.clear();
FileInputStream fis = null;
BufferedInputStream bis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream(record);
bis = new BufferedInputStream(fis);
ois = new ObjectInputStream(bis);
while(true) {
Member man = (Member)ois.readObject();
// readObejct() 메서드가 읽어드릴 데이터가 없으면 EOFException 예외 발생
list.add(man);
}
} catch (EOFException e) {
try {
if(ois != null) ois.close();
} catch (Exception e2) {
e2.printStackTrace();
}
} catch (Exception e) {
}
System.out.println(record.getName() + " 로드 성공");
} // load()
// 종료
public void end() {
System.out.println("- Program end -");
System.exit(0);
}
}
< JavaNetwork >
# 프로토콜
- 프로토콜은 다양한 네트워크 장치들이 서로 데이터를 교환할 수 있는 약속
# TCP
- 연결 지향 프로토콜
# UDP
비연결 지향 프로토콜
보내놓고 신경안쓰고 지 할거함
일단 보내면 끝
# IP
- 인터넷에 연결된 모든 통신망과 그 통신망에 연결된 컴퓨터에 부여하는 고유의 식별 주소
- 어떠한 PC를 찾아갈 때 사용
# DNS 서버
- URL 을 IP주소로 변환하는 서버
# PORT
통신하는 프로그램 간에 사용되는 연결 포트
-> IP 주소는 네트워크 상의 컴퓨터 또는 시스템을 식별하는 주소
-> 포트번호를 이용해서 통신할 응용프로그램을 식별기본 IP로 찾아가고
실행되는 특정 프로그램을 찾는 것은 지정된 포트값으로 찾아감
# java.net package
- 네트워크 프로그램을 작성하기 위한 class
package ch01_socket;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/*
* # server, client
* - server : client에게 네트워크를 통해서 서비스를 제공하는 시스템
* - client : server와 대응되는 개념, 서비스를 사용하는 사용자
*
* # Socket
* - server 와 client 간에 통신을 할 수 있도록 해주는 연결 통로
* - 소켓은 특정 IP 포트 번호와 결합
* - 클라이언트는 Socket 을 생성,
* - 서버는 ServerSocket을 생성한 후 이를 사용해서 Socket을 생성
*
* # port
* - 0 ~ 65535 까지 사용
* -> 0 ~ 1023 : well-know port
* 1024 ~ 49151 : 서버 소켓으로 사용
* 49152 ~ 65535 : 동적 포트
*
* # port 확인
* - cmd
* - netstat -ano
* TCP 중 127.0.0.1 인 놈이 있으면 활성화 되어 있는 것임
*
* PID 값으로 해당 port를 강제로 종료 시킴
*
* # port 죽이기
* - taskkill /f /pid pid번호
*
*/
public class ExsServer {
public static void main(String[] args) {
// 서버
// # 서버가 먼저 돌고있어야 클라이언트가 요청 가능
ServerSocket listener = null;
Socket socket = null;
try {
listener = new ServerSocket(10000); // 서버 소켓 생성
System.out.println("- Server 준비 -");
socket = listener.accept(); // 클라이언트로 부터 연결 요청 대기
System.out.println("접속 정보 : " + socket.toString());
} catch (Exception e) {
System.out.println("서버 Error");
} finally {
try {
if (socket != null)
socket.close();
if (listener != null)
listener.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
package ch01_socket;
import java.net.Socket;
public class ExClient {
public static void main(String[] args) {
// 클라이언트
Socket socket = null;
try {
// cmd(관리자 권한으로 실행) -> ipconfig -> IPv4 : ~~
// 192.168.12.223
// localhost를 사용할 수 있음 > 문자로 이루어짐
// -> 자동으로 내 pc의 IP 가져옴
// 변경될거라면 localhost를 사용하는 것이 좋음
// 이유 : IP가 바뀌어도 알아서 내 것을 가져옴
socket = new Socket("localhost", 10000);
// localhost
// - 컴퓨터 네트워크에서 사용되는 루프백 호스트명, 자신의 컴퓨터를 의미
} catch (Exception e) {
System.out.println("클라이언트 Error");
} finally {
try {
if (socket != null)
socket.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}