Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 객체 비교
- 다형성
- 메소드오버로딩
- exception
- cursor문
- NestedFor
- 컬렉션 타입
- Java
- EnhancedFor
- 추상메서드
- 컬렉션프레임워크
- 오라클
- GRANT VIEW
- abstract
- 제네릭
- oracle
- 한국건설관리시스템
- 대덕인재개발원
- 정수형타입
- 예외처리
- 사용자예외클래스생성
- 어윈 사용법
- 자동차수리시스템
- 자바
- 인터페이스
- 참조형변수
- 예외미루기
- 생성자오버로드
- 환경설정
- 집합_SET
Archives
- Today
- Total
거니의 velog
230911_입출력 5 본문
[ReporterSelect.java]
package kr.or.ddit.basic.tcp;
import java.util.Arrays;
import java.util.Collections;
public class ReporterSelect {
public static void main(String[] args) {
String[][] members = {
{"정소현", "최성동", "강민택", "강진석"},
{"이건정", "박상협", "한동욱", "전민균"},
{"장낙훈", "김영진", "신찬섭", "하지웅"},
{"최룡", "민지현", "김선욱"},
{"김지호", "홍창용", "서강민", "전승표"},
{"최예원", "송시운", "김민채"}
};
String[] reporters = new String[members.length];
for(int i=0; i<members.length; i++) {
int index = (int)(Math.random() * members[i].length);
reporters[i] = members[i][index];
}
System.out.println("== 각 조별 발표자 ==");
for(int i=0; i<reporters.length; i++) {
System.out.println((i+1) + " 조 발표자 : " + reporters[i]);
}
Collections.shuffle(Arrays.asList(reporters));
System.out.println("발표 순서 : " + Arrays.deepToString(reporters));
}
}
[Sender.java]
package kr.or.ddit.basic.tcp;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;
// 이 클래스는 소켓을 통해서 메시지를 보내는 역할을 담당하는 쓰레드 클래스이다.
public class Sender extends Thread {
private Socket socket;
private DataOutputStream dout;
private Scanner scan;
private String name;
// 생성자
public Sender(Socket socket) {
this.socket = socket;
scan = new Scanner(System.in);
System.out.print("대화명 입력 >> ");
name = scan.nextLine();
try {
dout = new DataOutputStream(this.socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while(dout != null) {
try {
dout.writeUTF(name + " : " + scan.nextLine());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
[Receiver.java]
package kr.or.ddit.basic.tcp;
import java.io.DataInputStream;
import java.net.Socket;
// 이 클래스는 소켓에서 메시지를 받아서 화면에 출력하는 역할을 담당하는 쓰레드 클래스이다.
public class Receiver extends Thread {
private Socket socket;
private DataInputStream din;
// 생성자
public Receiver(Socket socket) {
this.socket = socket;
try {
din = new DataInputStream(this.socket.getInputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
while(din != null) {
try {
System.out.println(din.readUTF());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
[TcpServer03.java]
package kr.or.ddit.basic.tcp;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer03 {
public static void main(String[] args) throws IOException {
// ServerSocket을 생성하고, 클라이언트가 접속해 오면 소켓을 만들어서
// 메시지를 받는 쓰레드와 메시지를 보내는 쓰레드에 이 소켓을 주입 시킨다.
ServerSocket server = new ServerSocket(7777);
System.out.println("서버가 준비중입니다...");
Socket socket = server.accept();
Sender sender = new Sender(socket);
Receiver receiver = new Receiver(socket);
sender.start();
receiver.start();
}
}
[TcpClient03.java]
package kr.or.ddit.basic.tcp;
import java.net.Socket;
public class TcpClient03 {
public static void main(String[] args) {
try {
// Socket socket = new Socket("localhost", 7777);
Socket socket = new Socket("192.168.36.115", 7777);
System.out.println("서버에 연결되었습니다...");
System.out.println();
Sender sender = new Sender(socket);
Receiver receiver = new Receiver(socket);
sender.start();
receiver.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
- D:\A_TeachingMaterial\03_HighJava\workspace\javaNetworkTest\bin
- cmd라고 쓰고 엔터 2번(클라이언트, 서버용)
- 서버용 : java kr.or.ddit.basic.tcp.TcpServer03
- 클라이언트용 : java kr.or.ddit.basic.tcp.TcpClient03
[TcpFileClient.java]
package kr.or.ddit.basic.tcp;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.Socket;
/*
* 파일을 전송하는 프로그램 작성하기
*
* - 클라이언트 프로그램 ==> 클라이언트 프로그램은 서버와 접속이 완료되면
* 'd/d_other'폴더에 있는 '펭귄.jpg'파일을 서버로 전송한다.
* ==> 파일 스트림으로 읽어서 소켓 스트림으로 출력한다.
*
* - 서버용 프로그램 ==> 서버용 프로그램은 클라이언트와 접속이 성공하고
* 클라이언트가 보내온 파일 데이터를 받아서 'd/d_other/uploads/' 폴더에
* 저장한다.
* ==> 소켓 스트림으로 읽어서 파일 스트림으로 출력한다.
*/
public class TcpFileClient {
private void clientStart() {
// 파일을 읽어서 Socket으로 쓰기 : 전송
File file = new File("d://d_other/펭귄.jpg");
String fileName = file.getName();
if(!file.exists()) {
System.out.println(fileName + " 파일이 없습니다.");
System.out.println("작업을 중단합니다...");
return;
}
try {
Socket socket = new Socket("localhost", 7777);
System.out.println("파일 전송 시작...");
// Socket용 OutputStream 객체 생성
DataOutputStream dout = new DataOutputStream(socket.getOutputStream());
BufferedOutputStream bout = new BufferedOutputStream(dout);
// 서버에 접속하면 첫번째로 전송할 파일의 파일명을 전송한다.
dout.writeUTF(fileName);
// 파일 입력용 InputStream 객체 생성
BufferedInputStream bin = new BufferedInputStream(
new FileInputStream(file)
);
byte[] temp = new byte[1024];
int length = 0;
// 파일 내용 읽어와 소켓으로 전송하기
while( (length = bin.read(temp)) > 0 ) {
bout.write(temp, 0, length);
}
bout.flush(); // 현재 버퍼에 저장된 내용을 클라이언트로 전송하고 버퍼를 비운다.
System.out.println("파일 전송 완료...");
// 스트림과 소켓 닫기
bin.close();
bout.close();
socket.close();
} catch (Exception e) {
// e.printStackTrace();
System.out.println("파일 전송 실패 : " + e.getMessage());
}
}
public static void main(String[] args) {
new TcpFileClient().clientStart();
}
}
[TcpFileServer.java]
package kr.or.ddit.basic.tcp;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 파일을 전송하는 프로그램 작성하기
*
* - 클라이언트 프로그램 ==> 클라이언트 프로그램은 서버와 접속이 완료되면
* 'd/d_other'폴더에 있는 '펭귄.jpg'파일을 서버로 전송한다.
* ==> 파일 스트림으로 읽어서 소켓 스트림으로 출력한다.
*
* - 서버용 프로그램 ==> 서버용 프로그램은 클라이언트와 접속이 성공하고
* 클라이언트가 보내온 파일 데이터를 받아서 'd/d_other/uploads/' 폴더에
* 저장한다.
* ==> 소켓 스트림으로 읽어서 파일 스트림으로 출력한다.
*/
public class TcpFileServer {
private void serverStart() {
// Socket으로 읽어서 file로 쓴다.
File saveDir = new File("d://d_other/uploads");
if(!saveDir.exists()) { // 저장할 폴더가 없으면 새 폴더로 만들어준다.
saveDir.mkdirs();
}
try {
ServerSocket server = new ServerSocket(7777);
System.out.println("서버가 준비중입니다...");
Socket socket = server.accept(); // 클라이언트의 요청을 기다린다.
System.out.println("파일 저장 시작...");
// 소켓용 입력 스트림 객체 생성
DataInputStream din = new DataInputStream(socket.getInputStream());
BufferedInputStream bin = new BufferedInputStream(din);
// 클라이언트가 접속되었을 때 첫 번째로 보내온 파일 이름을 받는다.
String fileName = din.readUTF();
File saveFile = new File(saveDir, fileName);
// 파일 출력용 스트림 객체 생성
BufferedOutputStream bout = new BufferedOutputStream(
new FileOutputStream(saveFile)
);
byte[] temp = new byte[1024];
int length = 0;
while( (length = bin.read(temp)) > 0 ) {
bout.write(temp, 0, length);
}
bout.flush();
System.out.println("파일 저장 완료");
// 스트림과 소켓 닫기
bin.close();
bout.close();
socket.close();
} catch (Exception e) {
// e.printStackTrace();
System.out.println("파일 저장 실패!! " + e.getMessage());
}
}
public static void main(String[] args) {
new TcpFileServer().serverStart();
}
}
- 서버 : java kr.or.ddit.basic.tcp.TcpFileServer
- 클라이언트 : java kr.or.ddit.basic.tcp.TcpFileClient
[TcpFileClient2.java]
package kr.or.ddit.basic.tcp;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.Socket;
/*
* 파일을 전송하는 프로그램 작성하기
*
* - 클라이언트 프로그램 ==> 클라이언트 프로그램은 서버와 접속이 완료되면
* 'd/d_other'폴더에 있는 '펭귄.jpg'파일을 서버로 전송한다.
* ==> 파일 스트림으로 읽어서 소켓 스트림으로 출력한다.
*/
public class TcpFileClient2 {
private void clientStart() {
// 전송할 파일 정보를 갖는 File객체 생성
File file = new File("d://d_other/펭귄.jpg");
if(!file.exists()) {
System.out.println(file.getPath() + " 파일이 없습니다.");
System.out.println("작업을 중단합니다...");
return;
}
Socket socket = null;
BufferedInputStream bin = null;
BufferedOutputStream bout = null;
DataOutputStream dout = null;
try {
socket = new Socket("localhost", 7777);
System.out.println("파일 전송 시작...");
// 파일 입력용 스트림 객체 생성
bin = new BufferedInputStream(new FileInputStream(file));
// 소켓으로 출력할 스트림 객체 생성
dout = new DataOutputStream(socket.getOutputStream());
bout = new BufferedOutputStream(dout);
// 서버에 접속하면 처음으로 파일명을 전송한다.
dout.writeUTF(file.getName());
// 파일이름 전송이 완료되면 파일의 내용을 읽어서 전송한다.
byte[] temp = new byte[1024];
int len = 0;
while( (len = bin.read(temp)) != -1 ) {
bout.write(temp, 0, len);
}
bout.flush();
System.out.println("파일 전송 완료...");
} catch (Exception e) {
// e.printStackTrace();
System.out.println("파일 전송 실패 : " + e.getMessage());
} finally {
// 스트림과 소켓 닫기
if(dout != null) try { dout.close(); } catch (Exception e2) {}
if(bout != null) try { bout.close(); } catch (Exception e2) {}
if(bin != null) try { bin.close(); } catch (Exception e2) {}
if(socket != null) try { socket.close(); } catch (Exception e2) {}
}
}
public static void main(String[] args) {
new TcpFileClient2().clientStart();
}
}
[TcpFileServer2.java]
package kr.or.ddit.basic.tcp;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 파일을 전송하는 프로그램 작성하기
*
* - 서버용 프로그램 ==> 서버용 프로그램은 클라이언트와 접속이 성공하고
* 클라이언트가 보내온 파일 데이터를 받아서 'd/d_other/uploads/' 폴더에
* 저장한다.
* ==> 소켓 스트림으로 읽어서 파일 스트림으로 출력한다.
*/
public class TcpFileServer2 {
private void serverStart() {
File saveDir = new File("d://d_other/uploads"); // 저장할 폴더 설정
if(!saveDir.exists()) { // 저장 폴더가 없으면 새로 만든다.
saveDir.mkdirs();
}
Socket socket = null;
DataInputStream din = null;
BufferedInputStream bin = null;
BufferedOutputStream bout = null;
ServerSocket server = null;
try {
server = new ServerSocket(7777);
System.out.println("서버가 준비되었습니다...");
socket = server.accept(); // 클라이언트의 접속을 기다린다.
System.out.println("파일 수신 시작...");
// 스트림 객체 생성
din = new DataInputStream(socket.getInputStream());
// 클라이언트가 처음으로 보낸 자료인 파일명을 받는다.
String fileName = din.readUTF();
// 수신한 파일명과 저장할 폴더를 이용한 File객체 생성
File file = new File(saveDir, fileName);
bin = new BufferedInputStream(din);
bout = new BufferedOutputStream(new FileOutputStream(file));
// 수신한 파일 데이터를 받아서 파일로 저장한다.
byte[] temp = new byte[1024];
int len = 0;
while( (len = bin.read(temp)) != -1 ) {
bout.write(temp, 0, len);
}
bout.flush();
System.out.println("파일 수신 완료...");
} catch (Exception e) {
// e.printStackTrace();
System.out.println("파일 수신 실패!! " + e.getMessage());
} finally {
if(din != null) try { din.close(); } catch (Exception e2) {}
if(bout != null) try { bout.close(); } catch (Exception e2) {}
if(bin != null) try { bin.close(); } catch (Exception e2) {}
if(socket != null) try { socket.close(); } catch (Exception e2) {}
if(server != null) try { server.close(); } catch (Exception e2) {}
}
}
public static void main(String[] args) {
new TcpFileServer2().serverStart();
}
}
- 서버 : java kr.or.ddit.basic.tcp.TcpFileServer2
- 클라이언트 : java kr.or.ddit.basic.tcp.TcpFileClient2
'대덕인재개발원 > 대덕인재개발원_자바기반 애플리케이션' 카테고리의 다른 글
230913_JDBC 1 (0) | 2023.09.12 |
---|---|
230912_입출력 6 (0) | 2023.09.11 |
230908_입출력 4 (0) | 2023.09.08 |
230907_입출력 3 (2) | 2023.09.07 |
230906_입출력 2 (0) | 2023.09.06 |