package Week03.day0723;
import java.util.ArrayList;
import java.util.Collections;
class Customer<T extends Order> implements Comparable<Customer>{ //order를 포함한 하위에 대해서만 선언가능.(special도 가능)
private String name;
private int age;
private int point;
private ArrayList<T> orders = new ArrayList<>();
Customer(String name, int age, int point) {
this.name = name;
this.age = age;
this.point = point;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getPoint() {
return point;
}
public void setPoint(int point) {
this.point = point;
}
public ArrayList<T> getOrders() {
return orders;
}
public void addOrders(T order) {
this.orders.add(order);
}
@Override
public int compareTo(Customer o) { // Point로 Customer 정렬, SpecialCustomer는 bonus를 더해준다 //customer로 해야인식가능(아니면 object로 인식)
System.out.println("비교 - Customer: " + this.name);
int thisToPoint = point;
int paramToPoint = 0;
if(o instanceof SpecialCustomer) {
paramToPoint = o.getPoint() + ((SpecialCustomer)o).getBonusPoint();
} else {
paramToPoint = o.getPoint();
}
//Comparator 방법 적용
// 첫 번째 파라미터로 넘어온 객체 < 두 번째 파라미터로 넘어온 객체: 음수 리턴
// 첫 번째 파라미터로 넘어온 객체 == 두 번째 파라미터로 넘어온 객체: 0 리턴
// 첫 번째 파라미터로 넘어온 객체 > 두 번째 파라미터로 넘어온 객체: 양수 리턴
//음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 변경된다.
if(thisToPoint < paramToPoint) {
return -1;
} else if (thisToPoint > paramToPoint) {
return 1;
}
return 0;
}
public String toString() { // point만 출력
return name + "/" + point;
}
}
class SpecialCustomer<T extends SpecialOrder> extends Customer<T>{
private int bonusPoint;
public SpecialCustomer(String name, int age, int point, int bonuspoint) {
super(name, age, point);
this.bonusPoint = bonuspoint;
}
public int getBonusPoint() {
return bonusPoint;
}
public void setBonusPoint(int bonusPoint) {
this.bonusPoint = bonusPoint;
}
public int compareTo(Customer o) {
System.out.println("비교 - SpecialCustomer: " + super.getName());
int thisToPoint = super.getPoint() + bonusPoint;
int paramToPoint = 0;
if(o instanceof SpecialCustomer) {
paramToPoint = o.getPoint() + ((SpecialCustomer)o).getBonusPoint();
} else {
paramToPoint = o.getPoint();
}
if(thisToPoint < paramToPoint) {
return -1;
} else if (thisToPoint > paramToPoint) {
return 1;
}
return 0;
}
public String toString() { // bonuspoint 합쳐진거 출력.
return super.getName() + "/" + (super.getPoint() + bonusPoint);
}
}
class Order{
private int orderNo;
private String product;
private String orderDt;
public Order(int orderNo, String product, String orderDt) {
this.orderNo = orderNo;
this.product = product;
this.orderDt = orderDt;
}
public int getOrderNo() {
return orderNo;
}
public void setOrderNo(int orderNo) {
this.orderNo = orderNo;
}
public String getProduct() {
return product;
}
public void setProduct(String product) {
this.product = product;
}
public String getOrderDt() {
return orderDt;
}
public void setOrderDt(String orderDt) {
this.orderDt = orderDt;
}
}
class SpecialOrder extends Order{
private String gift; // 사은품
public SpecialOrder(int orderNo, String product, String orderDt, String gift) {
super(orderNo, product, orderDt);
this.gift = gift;
}
public String getGift() {
return gift;
}
public void setGift(String gift) {
this.gift = gift;
}
}
public class practice0723 {
public static void main(String[] args) {
Customer<Order> c1 = new Customer<>("홍길동", 30, 100);
// Customer는 order를 포함한 자식만 선언가능.
Order o = new Order(1234, "정보보호론", "2019-07-01");
c1.addOrders(o);
SpecialCustomer<SpecialOrder> c2 = new SpecialCustomer<>("김길동", 31, 150, 50);
// SpecialCustomer는 SpecialOrder만 선택가능 (order는 선택불가능)
SpecialOrder so = new SpecialOrder(1234, "정보보호론", "2019-07-01", "각티슈");
c2.addOrders(so);
ArrayList al = new ArrayList();
Customer<Order> c3 = new Customer<>("최길동", 30, 100);
al.add(c1);
al.add(c2);
al.add(c3);
Collections.sort(al); // 점수순서대로 정렬.
System.out.println(al.toString());
}
}
--------------------------------------------------------------------------
package Week03.day0723;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
public class FilterStreamTest {
public static void main(String[] args) {
//보조Stream - Filter 입출력
//소문자로 변경
int c = 0;
try {
InputStream in = new LowerCaseInputStream(new BufferedInputStream(new FileInputStream("C:\\Temp\\practice0722.java")));
while((c=in.read())>=0) {
System.out.println((char)c);
}
in.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
class LowerCaseInputStream extends FilterInputStream{ //Filter대상 메소드 재정의
protected LowerCaseInputStream(InputStream in) {
super(in);
}
public int read() throws IOException{ // read는 읽어들이는 값을 불러옴.
int c = super.read();
return (c==-1 ? c : Character.toLowerCase((char)c));
}
public int read(byte[] b, int offset, int len) throws IOException{
int result = super.read(b, offset, len);
for(int i = offset; i<offset+result; i++) {
b[i] = (byte)Character.toLowerCase((char)b[i]);
}
return result;
}
}
--------------------------------------------------------------------------
package Week03.day0723;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FilterReader;
import java.io.IOException;
import java.io.Reader;
public class FilterReaderTest extends FilterReader{
public FilterReaderTest(Reader in) {
super(in);
}
//read 메소드를 override한다.
//주석부분은 읽지 않도록 filter 처리
public int read(char[] buf, int offset, int len) throws IOException{
int numChars = 0;
boolean inComment = false;
while(numChars ==0) {
numChars = in.read(buf, offset, len);
if(numChars ==-1)
return -1;
int last = offset;
for(int i=offset; i<offset+numChars; i++) {
// 주석부분은 filter로서 걸러낸다.
if(inComment) {
if((buf[i]=='*') && (buf[i+1]=='/')){
// System.out.println("주석1");
inComment = false; //주석종료알림
i++;
}
} else {
if((buf[i]=='/') && (buf[i+1]=='*')){
// System.out.println("주석2");
inComment = true; // 주석시작
i++;
} else {
buf[last++] = buf[i]; //Data 담기
}
}
}
numChars = last - offset;
}
return (numChars);
}
public int read() throws IOException{
char[] buf = new char[1];
//유니코드로서 2byte씩 읽어 들인다.
int result = read(buf, 0, 1);
if(result==-1) {
return -1;
} else {
return ((int)buf[0]);
}
}
public static void main(String[] args) {
//보조Stream - Filter 입출력
FileReader f = null;
BufferedReader in = null;
String buf;
try {
//File Input Stream을 생성한다.
f = new FileReader("practice0722.java");
//File Stream 인자로 하는 Filter Stream을 생성하여 이를 Buffer Stream에 연결한다.
in = new BufferedReader(new FilterReaderTest(f));
//한줄씩 읽어들인다. readLine() 은 내부에서 read() 메소드를 이용하여 작동한다.
while((buf = in.readLine()) != null) {
System.out.println(buf);
}
in.close();
} catch(Exception e) {
System.out.println(e);
}
}
}
--------------------------------------------------------------------------
package Week03.day0723;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
public class BufferedReaderWriter {
public static void main(String[] args) {
// 보조Stream- Buffer 입출력
FileReader fr = null;
FileWriter fw = null;
BufferedReader br = null;
BufferedWriter bw = null;
Date d = null;
try {
// "ReadFile.txt" 파일을 읽는 FileReader 객체 생성
// BufferedReader 객체 생성
fr = new FileReader("C:\\Temp\\practice0722.java");
br = new BufferedReader(fr);
//FileWriter로 파일 "Copy.File.txt"에 출력한다. 기존파일은 덮어쓴다.
//BufferedWriter 객체 생성
fw = new FileWriter("C:\\Temp\\practice0722.java", false);
bw = new BufferedWriter(fw);
String s = null;
d = new Date();
//파일 복사 시작 시간
long start = d.getTime();
//ReadFile.txt에서 한줄씩 읽어서 BufferedReader에 저장한다.
while((s=br.readLine())!=null) {
//읽은 데이터(한줄)를 BufferedWriter에 쓴다.
//한줄씩 읽으므로, newLine() 메소드로 줄바꿈을 해준다.
bw.write(s);
bw.newLine();
}
// 복사 완료된 시간을 얻는다.
d = new Date();
long end = d.getTime();
System.out.println("복사 시간 : " + (end-start)); // 복사 시간 : 0
} catch(Exception e) {
e.printStackTrace();
} finally {
//BufferedReader FileReader를 달아준다.
if(br !=null)try {br.close();}catch(IOException e) {}
if(fr !=null)try {fr.close();}catch(IOException e) {}
//BufferedWriter FileWriter를 달아준다.
if(bw !=null)try {bw.close();}catch(IOException e) {}
if(fw !=null)try {fw.close();}catch(IOException e) {}
}
}
}
--------------------------------------------------------------------------
package Week03.day0723;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Date;
public class ObjectInputOutputTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
FileOutputStream ostream = new FileOutputStream("practice0722.java");
ObjectOutputStream p = new ObjectOutputStream(ostream);
p.writeInt(12345);
p.writeObject("Today");
p.writeObject(new Date());
p.flush();
ostream.close();
FileInputStream istream = new FileInputStream("practice0722.java");
ObjectInputStream p2 = new ObjectInputStream(istream);
int i = p2.readInt();
String today = (String)p2.readObject();
Date date = (Date)p2.readObject();
System.out.println(i);
System.out.println(today);
System.out.println(date);
istream.close();
}
}
//출력값
//12345
//Today
//Tue Jul 23 14:26:59 KST 2019
--------------------------------------------------------------------------
package Week03.day0723;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class ObjectData implements Serializable{
String name;
int age;
float height;
public ObjectData() {
this("Noname", 0, 0.0f);
}
public ObjectData(String name, int age, float height) {
this.name = name;
this.age = age;
this.height = height;
}
private void writeObject(ObjectOutputStream stream) throws IOException {
stream.defaultWriteObject();
System.out.println("writeObject:");
}
private void readObject(ObjectInputStream stream) throws ClassNotFoundException, IOException {
stream.defaultReadObject();
System.out.println(" readObject : ");
}
public String toString() {
return("name : " + name+ ", age: " + age + ", height : " + height);
}
}
public class ObjectInputOutputTest2 {
public static void main(String[] args) {
ObjectData[] data = new ObjectData[3];
data[0] = new ObjectData("YongWoo", 26, 168f);
data[1] = new ObjectData("Kildong", 19, 174.8f);
data[2] = new ObjectData("Dongsoo", 30, 169.4f);
try {
FileOutputStream outf = new FileOutputStream("practice0722.java");
ObjectOutput out = new ObjectOutputStream(outf);
out.writeInt(data.length);
System.out.println("Number : " + data.length);
//Object 개수만큼 Object를 출력한다.
for(int i = 0; i<data.length; i++) {
out.writeObject(data[i]);
System.out.println(data[i]);
}
out.close();
FileInputStream inf = new FileInputStream("practice0722.java");
ObjectInput in = new ObjectInputStream(inf);
int numberOfData;
ObjectData objData;
numberOfData = in.readInt();
System.out.println("Number : " + numberOfData);
//Object개수만큼 읽어들인다.
for(int i = 0; i<numberOfData; i++) {
objData = (ObjectData)in.readObject();
System.out.println(objData);
}
in.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
//출력값
//Number : 3
//writeObject:
//name : YongWoo, age: 26, height : 168.0
//writeObject:
//name : Kildong, age: 19, height : 174.8
//writeObject:
//name : Dongsoo, age: 30, height : 169.4
//Number : 3
// readObject :
//name : YongWoo, age: 26, height : 168.0
// readObject :
//name : Kildong, age: 19, height : 174.8
// readObject :
//name : Dongsoo, age: 30, height : 169.4
--------------------------------------------------------------------------
package Week03.day0723;
import java.net.InetAddress;
import java.rmi.UnknownHostException;
import java.util.Arrays;
public class NetworkEx1 {
public static void main(String[] args) {
InetAddress ip = null;
InetAddress[] ipArr = null;
try {
ip = InetAddress.getByName("www.naver.com");
System.out.println("getHostName() : " + ip.getHostName());
System.out.println("getHostAddress() : " + ip.getHostAddress());
System.out.println("toString(): " + ip.toString());
byte[] ipAddr = ip.getAddress();
System.out.println("getAddress() : " + Arrays.toString(ipAddr));
String result = "";
for(int i=0; i<ipAddr.length; i++) {
result+=(ipAddr[i]<0) ? ipAddr[i] + 256 : ipAddr[i];
result+=".";
}
System.out.println("getAddress() + 256 : " + result);
System.out.println();
} catch(java.net.UnknownHostException e) {
e.printStackTrace();
}
try {
ip = InetAddress.getLocalHost();
System.out.println("getHostName() : " + ip.getHostName());
System.out.println("getHostAddress() : " + ip.getHostAddress());
System.out.println();
} catch(java.net.UnknownHostException e) {
e.printStackTrace();
}
try {
ipArr = InetAddress.getAllByName("www.naver.com");
for(int i=0; i<ipArr.length; i++) {
System.out.println("ipArr[" + i + "] : " + ipArr[i]);
}
} catch(java.net.UnknownHostException e) {
e.printStackTrace();
}
}
}
//출력값
//getHostName() : www.naver.com
//getHostAddress() : 210.89.164.90
//toString(): www.naver.com/210.89.164.90
//getAddress() : [-46, 89, -92, 90]
//getAddress() + 256 : 210.89.164.90.
//
//getHostName() : DESKTOP-CCP86DI
//getHostAddress() : 192.168.0.27
//
//ipArr[0] : www.naver.com/210.89.164.90
//ipArr[1] : www.naver.com/125.209.222.141
--------------------------------------------------------------------------
package Week03.day0723;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
public class NetworkEx4 {
public static void main(String[] args) {
//URL객체 예제2
//Stream으로 바로 접근하여 Data를 주고 받는다.
URL url = null;
BufferedReader input = null;
String address = "http://192.168.0.16:8090/pro07/memberForm.html";
String line = "";
try {
url = new URL(address);
//Stream을 reader로 바꿔준다.
input = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
while((line=input.readLine())!=null) {
System.out.println(line);
}
input.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
//출력값
//<!DOCTYPE html>
//<html>
//<head>
//<meta charset="UTF-8">
//<title>회원 가입창</title>
//<script type="text/javascript">
//function fn_sendMember(){
// var frmMember=document.frmMember;
// var id=frmMember.id.value;
// var pwd=frmMember.pwd.value;
// var name=frmMember.name.value;
// var email=frmMember.email.value;
// if(id.length==0 ||id==""){
// alert("아이디는 필수입니다.");
// }else if(pwd.length==0 ||pwd==""){
// alert("비밀번호는 필수입니다.");
// }
// else if(name.length==0 ||name==""){
// alert("이름은 필수입니다.");
// }else if(email.length==0 ||email==""){
// alert("이메일은 필수입니다.");
// }else{
// frmMember.method="post";
// frmMember.action="member3";
// frmMember.submit();
// }
//}
//</script>
//</head>
//<body>
// <form name="frmMember">
// <table>
// <th>회원 가입창</th>
// <tr>
// <td>아이디</td>
// <td><input type="text" name="id"></td>
// </tr>
// <tr>
// <td>비밀번호</td>
// <td><input type="password" name="pwd"></td>
// </tr>
// <tr>
// <td>이름</td>
// <td><input type="text" name="name"></td>
// </tr>
// <tr>
// <td>이메일</td>
// <td><input type="text" name="email"></td>
// </tr>
// </table>
// <input type="button" value="가입하기" onclick="fn_sendMember()">
// <input type="reset" value="다시입력">
// <input type="hidden" name="command" value="addMember" />
// </form>
// </body>
//</html>
//
--------------------------------------------------------------------------
package Week03.day0723;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
public class NetworkEx5 {
public static void main(String[] args) {
//URL객체 예제3 - download
URL url = null;
InputStream in = null; // 리소스에서 읽어들인다.
FileOutputStream out = null;
String address = "http://192.168.0.16:8090/pro07/memberForm.html";
int ch=0;
try {
url = new URL(address);
in = url.openStream();
out = new FileOutputStream("memberForm.html");
while((ch=in.read())!=-1) {
System.out.println("downloading..."); // 출력값 : downloading... 주구장창 나옴
out.write(ch);
}
in.close();
out.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
--------------------------------------------------------------------------
package Week03.day0723;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
public class URLConnectionTest {
public static void main(String[] args) {
//URLConnection 예제2 - HttpURLConnection
//서버에서 검색조건을 넣고 검색버튼을 누르는 기능과 유사
String input = "query=un";
try {
/* Set up*/
URL naver = new URL("http://kin.naver.com/search/list.nhn");
HttpURLConnection urlConn = (HttpURLConnection)naver.openConnection();
urlConn.setDoOutput(true); // Output을 사용가능하게 설정
// urlConn.setRequestMethod("POST");
/*write - 서버에 Write*/
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(urlConn.getOutputStream()));
bw.write(input);
bw.flush();
bw.close();
/*read - 서버에서 결과 read*/
BufferedReader br = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), "UTF-8"));
String inputLine;
while((inputLine = br.readLine())!=null) {
System.out.println(inputLine);
}
br.close();
} catch (Exception e) {
System.out.println("Exception : " + e.toString());
}
}
}
--------------------------------------------------------------------------
package Week03.day0723;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
public class TcpIpMultichatServer {
HashMap clients; // 모든 Client를 HashMap에 담고 있다.
TcpIpMultichatServer(){
clients = new HashMap();
Collections.synchronizedMap(clients);
}
public void start() {
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(7777);
System.out.println("서버가 시작되었습니다.");
while(true) {
//Server가 Client의 접속을 계속 기다린다.
socket = serverSocket.accept();
System.out.println("[" + socket.getInetAddress() + ":" + socket.getPort() + "]" + "에서 접속하였습니다." );
//접속할 Client와 통신할 Thread를 Client와 통신할 Socket을 가지고 만들어 띄워준다.
ServerReceiver thread = new ServerReceiver(socket); // 내부 class
thread.start();
}
}catch(Exception e) {
e.printStackTrace();
}
}// start()
void sendToAll(String msg) {
Iterator it = clients.keySet().iterator();
while(it.hasNext()) {
try {
DataOutputStream out = (DataOutputStream)clients.get(it.next());
out.writeUTF(msg);
} catch(IOException e) {}
} // while
} // sendToAll
public static void main(String[] args) {
new TcpIpMultichatServer().start();
}
class ServerReceiver extends Thread{
Socket socket;
DataInputStream in;
DataOutputStream out;
ServerReceiver(Socket socket){
this.socket = socket;
try {
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {}
}
public void run() {
String name = "";
try {
name = in.readUTF(); // 문자열 Read
sendToAll("#" + name + "님이 들어오셨습니다.");
clients.put(name, out); // clients는 외부 class 의 멤버변수로 client별 outputStream을 담고 있다.
System.out.println("현재 서버접속자 수는 " + clients.size() + "입니다.");
while(in!=null) {
sendToAll(in.readUTF()); // Read한 내용을 모든 Client에서 전달한다
}
} catch(IOException e) {
//ignore
} finally {
sendToAll("#" + name + "님이 나가셨습니다.");
clients.remove(name);
System.out.println("[" + socket.getInetAddress() + ":" + socket.getPort() + "]" + "에서 접속을 종료하였습니다.");
System.out.println("현재 서버접속자 수는 " + clients.size() + "입니다.");
} //try
} //run
} //ReceiverThread
} // class
--------------------------------------------------------------------------
package Week03.day0723;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ConnectException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class TcpIpMultichatClient {
public static void main(String[] args) throws UnknownHostException, IOException {
String chatName = "bit_chat2";
try {
String serverIp = "192.168.0.32";
// String serverIp = "127.0.0.1";
//소켓을 생성하여 연결을 요청한다.
Socket socket = new Socket(serverIp, 7777);
System.out.println("서버에 연결되었습니다.");
Thread sender = new Thread(new ClientSender(socket, chatName)); //서버로 chat문장 write
Thread receiver = new Thread(new ClientReceiver(socket)); // 서버에서 chat문장 read
sender.start();
receiver.start();
} catch(ConnectException ce) {
ce.printStackTrace();
}
} // main
//서버에 chat문장을 전달하는 thread
static class ClientSender extends Thread{
Socket socket;
DataOutputStream out;
String name;
ClientSender(Socket socket, String name){
this.socket = socket;
try {
out = new DataOutputStream(socket.getOutputStream());
this.name = name;
} catch(Exception e) {
}
}
public void run() {
//대화를 입력
Scanner scanner = new Scanner(System.in);
try {
if(out!=null) {
out.writeUTF(name); //chat 이름을 서버에 전달
}
while(out!=null) {
out.writeUTF("[" + name + "]" + scanner.nextLine()); // 채팅문장 서버에 전달
}
} catch(IOException e) {
}
}// run()
}// clientSender
//Server에서 전달하는 chat문장을 Read 하는 thread
static class ClientReceiver extends Thread{
Socket socket;
DataInputStream in;
ClientReceiver(Socket socket){
this.socket = socket;
try {
in = new DataInputStream(socket.getInputStream());
} catch (IOException e) {
}
}
public void run() {
while(in!=null) {
try {
System.out.println(in.readUTF());
} catch(IOException e) {
}
}
} // run()
} //ClientReceiver
} // class
--------------------------------------------------------------------------
package Week03.day0723;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
ServerSocket serverSocket = null;
try {
//서버소켓을 생성하여 7777번 포트와 결합(bind)시킨다.
serverSocket = new ServerSocket(7777);
System.out.println("[Server]" + getTime() + "서버가 준비되었습니다.");
} catch(IOException e) {
e.printStackTrace();
}
while(true) {
try {
System.out.println("[Server]" + getTime() + "연결요청을 기다립니다.");
//서버소켓은 클라이언트의 연결요청이 올 때까지 실행을 멈추고 계속 기다린다.
//클라이언트의 연결요청이 오면 클라이언트 소켓과 통신할 새로운 소켓을 생성한다.
Socket socket = serverSocket.accept();
System.out.println("[Server]" + getTime() + socket.getInetAddress() + "로부터 연결요청이 들어왔습니다.");
//소켓의 출력스트림을 얻는다.
OutputStream out = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
//원격 소켓(remote socket)에 데이터를 보낸다.
dos.writeUTF("[Notice] Test Message1 from Server.");
System.out.println("[Server]" + getTime() + "데이터를 전송했습니다.");
//스트림과 소켓을 닫아준다.
dos.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
} // while
}
}
--------------------------------------------------------------------------
package Week03.day0723;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ConnectException;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
//커넥션의 기본
try {
String serverIp = "127.0.0.1";
System.out.println("[Client]" + "서버에 연결중입니다. 서버IP : " + serverIp);
//소켓을 생성하여 연결을 요청한다.
Socket socket = new Socket(serverIp, 7777);
//소켓의 입력스트림을 얻는다.
InputStream in = socket.getInputStream();
DataInputStream dis = new DataInputStream(in);
//소켓으로부터 받은 데이터를 출력한다.
System.out.println("[Client]" + "서버로부터 받은 메세지 : " + dis.readUTF());
System.out.println("[Clinet]" + "연결을 종료합니다.");
//스트림과 소켓을 닫는다.
dis.close();
socket.close();
System.out.println("[Client]" + "연결이 종료되었습니다.");
} catch(ConnectException ce) {
ce.printStackTrace();
} catch(IOException ie) {
ie.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
}
}
'Java' 카테고리의 다른 글
디버깅하는 법 (0) | 2019.07.31 |
---|---|
주차관리 시스템 ver.2 (0) | 2019.07.24 |
객체 정렬하기 (0) | 2019.07.23 |
Java - Stream(byte, 문자) (0) | 2019.07.22 |
Java - Thread(싱글, 다중(멀티), 스위칭), 동기화 (0) | 2019.07.19 |