package demo.thread;

public class MyRunnable implements Runnable {

	@Override
	public void run() {
		System.out.println("MyRunnable run 실행 시작 ");
		for (int i=0; i<100; i++) {
			System.out.println("MyRunnable 실행 " + i);
		}
		System.out.println("MyRunnable run 실행 종료 ");
	}
}

 

package demo.thread;

public class MyRunnableApp {

	public static void main(String[] args) {
		System.out.println("메인 메소드 시작");

		MyRunnable my = new MyRunnable();
		Thread t = new Thread(my);
		t.start();
		
		for (int i=0; i<100; i++) {
			System.out.println("메인 메소드 실행 " + i);
		}
		
		System.out.println("메인 메소드 종료");
	}
}

 

package demo.thread;

public class MyThread extends Thread {

	@Override
	public void run() {
		System.out.println("MyThread의 run() 메소드 실행 시작");
		for (int i=0; i<100; i++) {
			System.out.println("MyThread 실행 중 " + i);
		}
		System.out.println("MyThread의 run() 메소드 실행 종료");
		
	}
}

 

package demo.thread;

public class ThreadApp {

	public static void main(String[] args) {
		
		System.out.println("메인 메소드 실행 시작");
		
		MyThread my = new MyThread();
		YourThread your = new YourThread();
		
		my.start();
		your.start();
		
		for (int i=0; i<100; i++) {
			System.out.println("메인 스레드 실행 " + i);
		}
		
		System.out.println("메인 메소드 실행 종료");
	}
}

 

package demo.thread;

public class YourThread extends Thread {

	@Override
	public void run() {
		System.out.println("YourThread의 run() 메소드 실행 시작");
		for (int i=0; i<100; i++) {
			System.out.println("YourThread 실행 중 " + i);
		}
		System.out.println("YourThread의 run() 메소드 실행 종료");
		
	}
}

'자바 > network' 카테고리의 다른 글

sync  (0) 2019.06.10
store  (0) 2019.06.10
simpleClient  (0) 2019.06.10
mallClient  (0) 2019.06.10
file  (0) 2019.06.10
package demo.sync;

public class ATM implements Runnable {

	private long balance = 1000000;
	
	@Override
	public void run() {
		for (int i=0; i<25; i++) {
			출금();
		}
	}
	
	public synchronized void 출금() {
		System.out.println("현재 잔액 : " + balance);
		System.out.println("출금 시작");
		balance -= 10000;
		System.out.println("출금 종료");
		System.out.println("출금 후 잔액 : " + balance);
	}
}

 

package demo.sync;


public class ATMApp {

	public static void main(String[] args) {
		ATM atm = new ATM();
		
		Thread t1 = new Thread(atm);
		Thread t2 = new Thread(atm);
		Thread t3 = new Thread(atm);
		Thread t4 = new Thread(atm);
		
		t1.start();
		t2.start();
		t3.start();
		t4.start();
	}
}

 

package demo.sync;

import java.util.ArrayList;
import java.util.Vector;

public class ListRunnable implements Runnable {

	
	@Override
	public void run() {
		ArrayList<String> names = new ArrayList<String>();
		
		for(int i=0; i<100; i++) {
			names.add("홍길동" + i);
		}
		System.out.println(names.size());
	}
}

 

package demo.sync;

public class ListRunnableApp {

	public static void main(String[] args) {
		

		ListRunnable work = new ListRunnable();
		
		Thread t1 = new Thread(work);
		Thread t2 = new Thread(work);
		Thread t3 = new Thread(work);

		t1.start();
		t2.start();
		t3.start();
	
	}
}

'자바 > network' 카테고리의 다른 글

thread  (0) 2019.06.10
store  (0) 2019.06.10
simpleClient  (0) 2019.06.10
mallClient  (0) 2019.06.10
file  (0) 2019.06.10
package demo.store;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class StoreClient {

	public static void main(String[] args) throws Exception {
		Scanner scanner = new Scanner(System.in);              // 사용자의 입력을 받는다.
		
		Socket socket = new Socket("192.168.10.254", 8000);    // 서버에 연결요청을 보낸다.
		
		PrintWriter out = new PrintWriter(socket.getOutputStream(), true); // 서버로 메시지 보낼 때 사용
		BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

		boolean isLogin = false;
		
		while (true) {
			if (!isLogin) {
				System.out.println("1. 가입 2. 로그인 0. 종료");
			} else {
				System.out.println("3. 목록조회 4. 상세조회 5. 장바구니조회 6. 장바구니 담기 7. 내정보 보기 8. 비밀번호 변경 9. 로그아웃 0. 종료");
			}
			
			System.out.println("메뉴 선택> ");
			int selectNo = scanner.nextInt();
			
			if (selectNo == 0) {
				System.out.println("프로그램 종료");
				break;
			} else if (selectNo == 1) {
				// 아이디, 이름, 비밀번호 입력받기
				System.out.println("아이디> ");
				String id = scanner.next();
				System.out.println("비밀번호> ");
				String password = scanner.next();
				System.out.println("이름> ");
				String name = scanner.next();
				
				
				// 입력받은 아이디, 비밀번호, 이름을 서버로 보내기
				out.println("add_user:" + id + ":" + password + ":" + name);
				
				// 서버가 보낸 응답 받기
				// 응답 메시지 화면에 표시하기
				String message = in.readLine();
				System.out.println("응답메시지: " + message);
				
			} else if (selectNo == 2) {
				System.out.println("아이디> ");
				String id = scanner.next();
				System.out.println("비밀번호> ");
				String password = scanner.next();

				out.println("login_user:" + id + ":" + password);
				
				String message = in.readLine();
				System.out.println("응답메시지: " + message);
				
				String[] s = message.split(":");
				if (s[1].equals("success")) {
					isLogin = true;
				}
				
			} else if (selectNo == 3) {
				out.println("view_products");
				
				String message = in.readLine();
				/* Ver1
				String resSubstract = message.substring(18);
				String[] splitted = resSubstract.split(":");
				
				for (int i=0; i < splitted.length; i++) {
				String[] splitted2 = splitted[i].split(",");
					for (int j=0; j<splitted2.length; j++) {
						System.out.println(splitted2[j]);
					}
				}
				*/
				
				
				/* Ver2
				String[] splitted = message.split(":");
				
				for (int i=1; i < splitted.length; i++) {
					String[] splitted2 = splitted[i].split(",");
					for (int j=0; j<splitted2.length; j++) {
						System.out.println(splitted2[j]);
					}
				}
				*/
				
				// Ver3
				String[] a = message.substring(18).split(":");
				for (int i=0; i < a.length; i++) {
					String b[] = a[i].split(",");
					System.out.println("상품번호: " + b[0]);
					System.out.println("상품명: " + b[1]);
					System.out.println("가격: " + b[2]);
				}
				
				
			} else if (selectNo == 4) {
				System.out.println("제품번호 입력>");
				int productNo = scanner.nextInt();
				out.println("detail_product:" + productNo);
				
				String message = in.readLine();
				System.out.println(message);
				
			} else if (selectNo == 5) {
				out.println("view_cart");
				
				String message = in.readLine();
				System.out.println(message);
				
			} else if (selectNo == 6) {
				System.out.println("제품번호 입력>");
				int productNo = scanner.nextInt();
				System.out.println("수량 입력>");
				int amount = scanner.nextInt();
				out.println("add_cart:" + productNo + ":" + amount);
				
				String message = in.readLine();
				System.out.println("응답메시지: " + message);
				
			} else if (selectNo == 7) {
				out.println("view_user");
				
				String message = in.readLine();
				System.out.println("응답메시지: " + message);
				
			} else if (selectNo == 8) {
				String oldPassword = scanner.next();
				String newPassword = scanner.next();
				out.println("change_pwd:" + oldPassword + ":" + newPassword);
				
				String message = in.readLine();
				System.out.println("응답메시지: " + message);
				
			} else if (selectNo == 9) {
				out.println("logout_user");
				
				String message = in.readLine();
				System.out.println("응답메시지: " + message);
			}
		}
	}
}
package demo.store;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class Server {

	public static void main(String[] args) throws Exception {
		
		ServerSocket server = new ServerSocket(8000);
		ArrayList<User> users = new ArrayList<User>();
		ArrayList<Product> products = new ArrayList<Product>();
		ArrayList<Item> carts = new ArrayList<Item>();
		
		User session = null;
		
		while (true) {
			
			Socket socket = server.accept();
			
			// 스트림 연결
			
			// 클라이언트가 보낸 메세지 읽기
			String text = in.readLine();
			
			String[] values = text.split(":");
			// 메세지 해석 add_user:hong:zxcv1234:홍길동
			//             view_carts
			//             detail_product:100
			if ("add_user".equals(values[0])) {
				// 전달된 값을 User객체 생성해서 담고
				// User객체를 위에서 생성한 ArrayList에 담기
				
				// 클라이언트에 응답보내기
				out.println("res_add_user:success");
				
			} else if ("login_user".equals(values[1])) {
				
			}
		}
	}
}

'자바 > network' 카테고리의 다른 글

thread  (0) 2019.06.10
sync  (0) 2019.06.10
simpleClient  (0) 2019.06.10
mallClient  (0) 2019.06.10
file  (0) 2019.06.10
package demo.simple;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class SimpleClient {

	public static void main(String[] args) throws Exception {
		
		// 서버에 연결 요청
		Socket socket = new Socket("192.168.10.254", 8000);
		
		OutputStream out = socket.getOutputStream();
		InputStream in = socket.getInputStream();
		
		PrintWriter writer = new PrintWriter(out);
		BufferedReader reader = new BufferedReader(new InputStreamReader(in));
		
		// 서버로 메시지 보내기
		writer.println("");
		writer.flush();
		
		// 서버가 보낸 메시지 읽기
		String message = reader.readLine();
		System.out.println("응답메시지: " + message);
		
		socket.close();
		
	}
}

 

package demo.simple;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SimpleServer {

	public static void main(String[] args) throws Exception {
		
		// 클라이언트의 연결 요청을 처리하는 ServerSocket 생성하기
		ServerSocket server = new ServerSocket(8000);
		System.out.println("서버가 시작되었습니다.");
		
		while (true) {
			// Socket accept()
			// 1. 클라이언트의 연결요청이 있을 때까지 프로그램 실행을 일시정지시킨다.
			// 2. 클라이언트의 연결요청이 접수되면 그 클라이언트와 통신할 때 사용할 Socket객체를 제공한다.
			Socket socket = server.accept();
			
			// Socket으로부터 획득한 스트림을 문자열 전송이 가능하도록 적절한 보조 스트림과 연결시키기
			InputStream in = socket.getInputStream();
			OutputStream out = socket.getOutputStream();
			
			BufferedReader reader = new BufferedReader(new InputStreamReader(in));
			PrintWriter writer = new PrintWriter(out);
			
			String name = reader.readLine();
			System.out.println("[" + name + "]이 접속하였습니다");
			
		}
		
	}
}

'자바 > network' 카테고리의 다른 글

sync  (0) 2019.06.10
store  (0) 2019.06.10
mallClient  (0) 2019.06.10
file  (0) 2019.06.10
chat  (0) 2019.06.10
package demo.mall;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class MallClient {

	public static void main(String[] args) throws Exception {
		
		Socket socket = new Socket("192.168.10.254", 8000);
		
		PrintWriter out = new PrintWriter(socket.getOutputStream());
		BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		
		Scanner scanner = new Scanner(System.in);
		
		while (true) {
			System.out.println("1. 전체 조회 2. 상세 조회 3. 등록 0. 종료");
			
			System.out.println("메뉴 선택> ");
			int selectNo = scanner.nextInt();
			if (selectNo == 1) {
				out.println("ALL_REQ");
				out.flush();
				
			} else if (selectNo == 2) {
				System.out.println("상품번호 입력> ");
				int productNo = scanner.nextInt();
				out.println("DETAIL_REQ:" + productNo);
				out.flush();
				
			} else if (selectNo == 3) {
				System.out.println("상품명 입력> ");
				String name = scanner.next();
				System.out.println("제조사 입력> ");
				String maker = scanner.next();
				System.out.println("상품 종류> ");
				String type = scanner.next();
				System.out.println("상품가격 입력> ");
				int price = scanner.nextInt();
				
				out.println("ADD_REQ:" + name + "," + maker + "," + type + "," + price);
				out.flush();
				
			} else if (selectNo == 0) {
				break;
			}
			String message = in.readLine();
			System.out.println("응답 메시지: " + message);
		}
	}
}

'자바 > network' 카테고리의 다른 글

sync  (0) 2019.06.10
store  (0) 2019.06.10
simpleClient  (0) 2019.06.10
file  (0) 2019.06.10
chat  (0) 2019.06.10
package demo.file;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

import org.apache.commons.io.IOUtils;

public class FileServer {

	public static void main(String[] args) throws Exception {
		
		// 클라이언트의 연결 요청을 처리할 ServerSocket 생성
		ServerSocket server = new ServerSocket(8000);
		System.out.println("서버가 시작되었습니다.");
		while (true) {
			// 클라이언트의 연결요청이 접수되면 그 클라이언트와 통신할 소켓을 제공받는다.
			Socket socket = server.accept();
			
			// 소켓으로부터 입력스트림/출력스트림 획득
			InputStream in = socket.getInputStream();
			OutputStream out = socket.getOutputStream();
			
			// 위에서 획득한 스트림을 문자열, 정수, 파일데이터를 송수신할 수 있는
			// 보조스트림(DataInpuStream, DataOutputStream)과 연결
			DataInputStream dis = new DataInputStream(in);
			DataOutputStream dos = new DataOutputStream(out);
			
			// 클라이언트가 보낸 문자열, 정수 읽어오기
			String filename = System.currentTimeMillis() + dis.readUTF();
			long filesize = dis.readLong();
			
			// 클라이언트가 보낸 파일을 저장할 스트림 생성하기
			FileOutputStream fos = new FileOutputStream("c:/temp/" + filename);
			System.out.println("["+filename+"] 저장을 시작");
			
			// 클라이언트가 보낸 파일데이터 읽어서 파일로 저장하기
			int readSize = 0;						// 읽어온 파일 데이터를 크기를 저장할 변수
			int len = 0;
			byte[] buf = new byte[1024];
			while ((len=dis.read(buf)) != -1) {		// 1. 스트림으로부터 데이터 읽기
				fos.write(buf, 0, len);				// 2. 파일에 기록하기
				readSize += len;                    // 3. 읽어들인 파일 데이터 크기를 증가시키기
				if (readSize == filesize) {         // 4. 읽어들인 파일의 크기와 파일 사이즈가 일치하면 반복 탈출
					break;
				}
			}
			fos.close();
			System.out.println("["+filename+"] 저장이 완료");
			
			dos.writeUTF("["+filename+"]의 저장이 완료되었습니다.");
			dos.flush();			
		}
	}
}​

 

package demo.file;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

import org.apache.commons.io.IOUtils;

public class FileClient {

	public static void main(String[] args) throws Exception {
		// 소켓을 생성해서 서버에 연결요청하기
		Socket socket = new Socket("192.168.10.254", 8000);
		
		// 소켓으로부터 입력스트림/출력스트림 획득하기
		OutputStream out = socket.getOutputStream();
		InputStream in = socket.getInputStream();
		
		// 소켓으로부터 획득한 스트림을 보조스트림과 연결하기
		DataOutputStream dos = new DataOutputStream(out);
		DataInputStream dis = new DataInputStream(in);
	
		File file = new File("c:/temp/suyoung.jpg");
		String filename = file.getName();                // 파일 이름 획득
		long filesize = file.length();                   // 파일 사이즈 획득
		FileInputStream fis = new FileInputStream(file); // 파일 데이터 획득을 위한 입력 스트림 생성
		
		// 서버로 파일명, 파일사이즈, 파일데이터 보내기
		dos.writeUTF(filename);
		dos.writeLong(filesize);
		IOUtils.copy(fis, dos); // FileInputStream으로 읽어서 DataOutputStream으로 복사
		
		// 서버로부터 메시지 받기
		String message = dis.readUTF();
		System.out.println("응답 메시지 : " + message);
		
		socket.close();
		
	}
}

 

'자바 > network' 카테고리의 다른 글

sync  (0) 2019.06.10
store  (0) 2019.06.10
simpleClient  (0) 2019.06.10
mallClient  (0) 2019.06.10
chat  (0) 2019.06.10
package demo.chat;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class ChatClient extends JFrame {

	private JTextArea messageTextArea = new JTextArea();
	private JTextArea inputTextArea = new JTextArea();
	private JButton sendButton = new JButton("전송");
	
	public ChatClient() {
		
		try {
			Socket socket = new Socket("192.168.10.254", 8000);
			
			PrintWriter out = new PrintWriter(socket.getOutputStream());
			BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			
			// 수신 전용 작업을 실행하는 스레드 생성
			ChatClientThread cct = new ChatClientThread();
			// 서버가 전송한 메시지를 수신하는 스트림 전달
			cct.setIn(in);
			// 메시지를 표현할 콘트롤 전달
			cct.setMessageTextArea(messageTextArea);
			
			cct.start();
			
			setTitle("심플 채팅");
			setLayout(new BorderLayout());
			
			messageTextArea.setEditable(false);
			
			JPanel bottomPanel = new JPanel(new BorderLayout());
			
			JScrollPane scrollPane = new JScrollPane(inputTextArea);
			inputTextArea.setPreferredSize(new Dimension(0, 50));
			bottomPanel.add(scrollPane, BorderLayout.CENTER);
			bottomPanel.add(sendButton, BorderLayout.EAST);
			
			add(new JScrollPane(messageTextArea), BorderLayout.CENTER);
			add(bottomPanel, BorderLayout.SOUTH);
			
			
			setVisible(true);
			setBounds(200, 200, 500, 700);
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			
			sendButton.addActionListener(e->{
				// 입력된 텍스트를 읽어오기
				String text = inputTextArea.getText();
				// 서버로 텍스트 보내기
				out.println(text);
				out.flush();
				
				// 입력창의 텍스트 지우기
				inputTextArea.setText("");
			});
			
			// 전송버튼 비활성화
			sendButton.setEnabled(false);
			
			inputTextArea.addKeyListener(new KeyAdapter() {
				@Override
				public void keyReleased(KeyEvent e) {
					// 입력창에 입력된 텍스트를 읽어온다.
					String text = inputTextArea.getText();
					// 텍스트의 길이가 1 이상이면 전송버튼 활성화
					// 입력된 텍스트가 없으면 전송버튼 비활성화
					if (text.length() > 0) {
						sendButton.setEnabled(true);
					} else {
						sendButton.setEnabled(false);
					}
				}
			});
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, "서버와 통신 중 오류가 발생하였습니다.", "통신 오류", JOptionPane.ERROR_MESSAGE);
			System.exit(0);
		}
	}
	
	public static void main(String[] args) {
		new ChatClient();
	}
	
}

 

package demo.chat;

import java.io.BufferedReader;

import javax.swing.JOptionPane;
import javax.swing.JTextArea;

public class ChatClientThread extends Thread {

	private JTextArea messageTextArea;
	private BufferedReader in;
	
	//public ChatClientThread(JTextArea messageTextArea, BufferedReader in) {
	//	this.messageTextArea = messageTextArea;
	//	this.in = in;
	//}
	
	public void run() {
		while (true) {
			try {
				// 서버로부터 메시지 수신
				String text = in.readLine();
				
				// 메시지를 채팅창에 표현
				messageTextArea.append(text + "\n");
				messageTextArea.setCaretPosition(messageTextArea.getText().length());
				
			} catch (Exception e) {
				JOptionPane.showMessageDialog(null, "서버와 연결이 끊어졌습니다", "서버 연결 오류", JOptionPane.ERROR_MESSAGE);
				System.exit(0);
			}
		}
	}

	public void setMessageTextArea(JTextArea messageTextArea) {
		this.messageTextArea = messageTextArea;
	}

	public void setIn(BufferedReader in) {
		this.in = in;
	}
}

 

package demo.chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class ChatServer {

	// 서버에 접속한 모든 클라이언트와 통신을 담당하는 스레드(ChatServerThread)를
	// 저장하는 ArrayList객체 생성하기
	private ArrayList<ChatServerThread> threadList = new ArrayList<ChatServerThread>();
	
	public ChatServer() {
		try {
			ServerSocket server = new ServerSocket(8000);
			System.out.println("채팅 서버가 시작됨...");
			
			while (true) {
				try {
					System.out.println("클라이언트의 요청 대기중...");
					// 연결 요청을 수락하고,
					// 연결 요청을 한 클라이언트와 통신하는 소켓 획득하기
					Socket socket = server.accept();
					System.out.println("클라이언트의 연결 완료...");
					
					// 송수신을 담당하는 스레드 만들기
					ChatServerThread thread = new ChatServerThread();
					threadList.add(thread);
					thread.setSocket(socket);
					thread.setThreadList(threadList);
					thread.start();
					
					//BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
					//PrintWriter out = new PrintWriter(socket.getOutputStream());
					
				} catch (Exception e) {
					
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		new ChatServer();
	}
}

 

package demo.chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;

public class ChatServerThread extends Thread {

	private ArrayList<ChatServerThread> threadList;
	private Socket socket;
	private BufferedReader in;
	private PrintWriter out;
	
	public void sendMessage(String message) throws Exception {
		out.println(message);
		out.flush();
	}
	
	public void broadcastMessage(String message) throws Exception {
		for (ChatServerThread thread : threadList) {
			thread.sendMessage(message);
		}
	}
	public void run() {
		try {
			in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			out = new PrintWriter(socket.getOutputStream());
			
			while (true) {
			
			// 클라이언트가 보낸 메시지 수신하기
			String message = in.readLine();
			
			// 수신된 메시지를 모든 클라이언트에게 보내기
			broadcastMessage(message);
			
			}
			
		} catch (Exception e) {
		}
	}

	public void setThreadList(ArrayList<ChatServerThread> threadList) {
		this.threadList = threadList;
	}

	public void setSocket(Socket socket) {
		this.socket = socket;
	}	
}

'자바 > network' 카테고리의 다른 글

sync  (0) 2019.06.10
store  (0) 2019.06.10
simpleClient  (0) 2019.06.10
mallClient  (0) 2019.06.10
file  (0) 2019.06.10

+ Recent posts