소스 검색

udp tcp 코드 upload

tobby48 5 년 전
부모
커밋
c3d04c045c

+ 0
- 63
src/kr/co/swh/lecture/network/filetrans/FileReceiveServer.java 파일 보기

@@ -1,63 +0,0 @@
1
-package kr.co.swh.lecture.network.filetrans; 
2
-
3
-import java.io.BufferedOutputStream;
4
-import java.io.DataOutputStream;
5
-import java.io.File;
6
-import java.io.FileOutputStream;
7
-import java.net.DatagramPacket;
8
-import java.net.DatagramSocket;
9
-
10
-/**
11
- * <pre>
12
- * kr.co.swh.lecture.network.filetrans 
13
- * FileReceiveServer.java
14
- *
15
- * 설명 :파일 전송 서버
16
- * </pre>
17
- * 
18
- * @since : 2018. 12. 28.
19
- * @author : tobby48
20
- * @version : v1.0
21
- */
22
-public class FileReceiveServer {
23
-	public static void main(String[] args) {
24
-		//	전송받을 UDP 소켓을 생성
25
-		try {
26
-			DatagramSocket socket = new DatagramSocket(9999);
27
-			System.out.println("수신 준비 완료.");
28
-
29
-			//	데이터를 전송받을 스트림
30
-			FileOutputStream dos = null;
31
-			while(true){
32
-				//	전송받을 데이터 패킷 생성
33
-				DatagramPacket dp = new DatagramPacket(new byte[512], 512);
34
-				//	데이터 전송받기
35
-				socket.receive(dp);
36
-
37
-				//	전송받은 데이터 를 문자열로 변환
38
-				String str = new String(dp.getData()).trim();
39
-				//	전송받은 문자열이 start 라면 파일전송 시작
40
-				if(str.equals("start")){
41
-					System.out.println("전송 시작");
42
-					//	파일 객체 생성
43
-					File file = new File("C:\\Users\\tobby48\\b.txt");
44
-					//	파일 쓰기 객체
45
-					dos = new FileOutputStream(file);
46
-				}
47
-				//	전송받은 문자열이 end 라면 전송완료
48
-				else if(str.equals("end")){
49
-					System.out.println("전송 완료");
50
-					break;
51
-				}
52
-				else{
53
-					//	0부터 길이만큼 파일내용 쓰기
54
-					dos.write(str.getBytes(), 0, str.getBytes().length);
55
-				}
56
-			}
57
-			dos.close();
58
-			socket.close();
59
-		} catch (Exception e) {
60
-			System.out.println(e.getMessage());
61
-		}
62
-	}
63
-}

+ 95
- 0
src/kr/co/swh/lecture/network/filetrans/FileReceiveServerTCP.java 파일 보기

@@ -0,0 +1,95 @@
1
+package kr.co.swh.lecture.network.filetrans; 
2
+
3
+import java.io.BufferedOutputStream;
4
+import java.io.DataInputStream;
5
+import java.io.File;
6
+import java.io.FileOutputStream;
7
+import java.io.IOException;
8
+import java.net.ServerSocket;
9
+import java.net.Socket;
10
+
11
+/**
12
+ * <pre>
13
+ * kr.co.swh.lecture.network.filetrans 
14
+ * FileReceiveServer.java
15
+ *
16
+ * 설명 :파일 전송 서버
17
+ * </pre>
18
+ * 
19
+ * @since : 2018. 12. 28.
20
+ * @author : tobby48
21
+ * @version : v1.0
22
+ */
23
+public class FileReceiveServerTCP {
24
+
25
+	public static void main(String[] args) {
26
+        ServerSocket serverSocket = null;
27
+        Socket socket = null;
28
+        String filename = "C:\\Users\\tobby48\\receive-data.txt";
29
+        try {
30
+            // 리스너 소켓 생성 후 대기
31
+            serverSocket = new ServerSocket(8081); // socket(),bind();
32
+  
33
+            // 연결되면 통신용 소켓 생성           
34
+            socket = serverSocket.accept(); // listen(),accept();
35
+            long start = System.currentTimeMillis();
36
+            // 파일 수신 작업 시작
37
+            FileReceiver fr = new FileReceiver(socket,filename,start);
38
+            fr.start();
39
+        } catch (IOException e) {
40
+            e.printStackTrace();
41
+        }
42
+  
43
+    }
44
+}
45
+  
46
+class FileReceiver extends Thread {
47
+    Socket socket;
48
+    DataInputStream dis;
49
+    FileOutputStream fos;
50
+    BufferedOutputStream bos;
51
+    String filename;
52
+    long start;
53
+    int control = 0;
54
+    public FileReceiver(Socket socket,String filestr,long starttime) {
55
+        this.socket = socket;
56
+        this.filename = filestr;
57
+        this.start = starttime;
58
+    }
59
+  
60
+    @Override
61
+    public void run() {
62
+        try {
63
+            dis = new DataInputStream(socket.getInputStream());
64
+ 
65
+            String fName = filename;
66
+  
67
+            // 파일을 생성하고 파일에 대한 출력 스트림 생성
68
+            File f = new File(fName);
69
+            fos = new FileOutputStream(f);
70
+            bos = new BufferedOutputStream(fos);
71
+            
72
+  
73
+            // 바이트 데이터를 전송받으면서 기록
74
+            int len;
75
+            int size = 4096;
76
+            byte[] data = new byte[size];
77
+            while ((len = dis.read(data)) != -1) {
78
+                control++;
79
+                if(control % 10000 == 0)
80
+                {
81
+                    System.out.println("수신중..." + control/10000);      
82
+                }
83
+                bos.write(data, 0, len);
84
+            }
85
+            long end = System.currentTimeMillis();
86
+            System.out.println( "Elapsed Time (seconds) : " + ( end - start )/1000.0 );
87
+            bos.flush();
88
+            bos.close();
89
+            fos.close();
90
+            dis.close();
91
+        } catch (IOException e) {
92
+            e.printStackTrace();
93
+        }
94
+    }
95
+}

+ 87
- 0
src/kr/co/swh/lecture/network/filetrans/FileReceiveServerUDP.java 파일 보기

@@ -0,0 +1,87 @@
1
+package kr.co.swh.lecture.network.filetrans; 
2
+
3
+import java.io.FileOutputStream;
4
+import java.net.DatagramPacket;
5
+import java.net.DatagramSocket;
6
+
7
+/**
8
+ * <pre>
9
+ * kr.co.swh.lecture.network.filetrans 
10
+ * FileReceiveServerUDP.java
11
+ *
12
+ * 설명 :파일 전송 서버
13
+ * </pre>
14
+ * 
15
+ * @since : 2018. 12. 28.
16
+ * @author : tobby48
17
+ * @version : v1.0
18
+ */
19
+public class FileReceiveServerUDP {
20
+	public static final int DEFAULT_BUFFER_SIZE = 10000;
21
+	
22
+	public static void main(String[] args) {
23
+		int port =  9999;
24
+		String filename = "C:\\Users\\tobby48\\receive-data.txt";
25
+
26
+		long fileSize;
27
+		long totalReadBytes = 0;
28
+
29
+		byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
30
+		try {
31
+			int nReadSize = 0;
32
+			System.out.println("Waitng.....");
33
+
34
+			DatagramSocket ds = new DatagramSocket(port);
35
+			FileOutputStream fos = null;       
36
+			fos = new FileOutputStream(filename);
37
+			
38
+			//	start 신호 받는 파트
39
+			DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
40
+			ds.receive(dp);		//	start 신호 받음
41
+			String str = new String(dp.getData()).trim();
42
+
43
+			if (str.equals("start")){
44
+				System.out.println(str);
45
+				
46
+				//	파일의 크기 받는 파트
47
+				dp = new DatagramPacket(buffer, buffer.length);
48
+				ds.receive(dp);	//	파일의 크기 받음
49
+				str = new String(dp.getData()).trim();
50
+				fileSize = Long.parseLong(str);
51
+				
52
+				//	클라이언트로부터 파일의 내용을 받는 파트
53
+				double startTime = System.currentTimeMillis(); 
54
+				while (true) {
55
+					ds.receive(dp);
56
+					str = new String(dp.getData()).trim();
57
+					nReadSize = dp.getLength();
58
+					fos.write(dp.getData(), 0, nReadSize);
59
+					
60
+					//	진행률 출력
61
+					totalReadBytes+=nReadSize;
62
+					System.out.println("In progress: " + totalReadBytes + "/"
63
+							+ fileSize + " Byte(s) ("
64
+							+ (totalReadBytes * 100 / fileSize) + " %)");
65
+					if(totalReadBytes>=fileSize)
66
+						break;
67
+				}
68
+				double endTime = System.currentTimeMillis();
69
+				double diffTime = (endTime - startTime)/ 1000;;
70
+				double transferSpeed = (fileSize / 1000)/ diffTime;
71
+
72
+				System.out.println("time: " + diffTime+ " second(s)");
73
+				System.out.println("Average transfer speed: " + transferSpeed + " KB/s");
74
+				System.out.println("File transfer completed");
75
+				Thread.sleep(5000);
76
+				fos.close();
77
+				ds.close();
78
+			}
79
+			else{
80
+				System.out.println("Start Error");
81
+				fos.close();
82
+				ds.close();
83
+			}
84
+		} catch (Exception e) {}
85
+		System.out.println("Process Close");
86
+	}
87
+}

+ 0
- 69
src/kr/co/swh/lecture/network/filetrans/FileSendClient.java 파일 보기

@@ -1,69 +0,0 @@
1
-package kr.co.swh.lecture.network.filetrans; 
2
-
3
-import java.io.File;
4
-import java.io.FileInputStream;
5
-import java.net.DatagramPacket;
6
-import java.net.DatagramSocket;
7
-import java.net.InetAddress;
8
-
9
-/**
10
- * <pre>
11
- * kr.co.swh.lecture.network.filetrans 
12
- * FileSendClient.java
13
- *
14
- * 설명 :파일 전송 클라이언트
15
- * </pre>
16
- * 
17
- * @since : 2018. 12. 28.
18
- * @author : tobby48
19
- * @version : v1.0
20
- */
21
-public class FileSendClient {
22
-
23
-	public static void main(String[] args) {
24
-		try{
25
-			File file = new File("C:\\Users\\tobby48\\Google 드라이브\\학원\\운영\\데이터베이스 백업\\2018-11-21.sql");
26
-			//	파일이 없다면 프로그램 종료
27
-			if(file.exists() == false){
28
-				System.out.println("파일이 존재하지 않습니다.");
29
-				System.exit(0);
30
-			}
31
-			
32
-			//	파일내용을 읽기위한 스트림 생성
33
-			FileInputStream fis = new FileInputStream(file);
34
-			
35
-			//	UDP 소켓 생성
36
-			DatagramSocket socket = new DatagramSocket();
37
-			//	전송할 파일 서버위치
38
-			InetAddress ia = InetAddress.getByName("127.0.0.1");
39
-			//	파일 전송 시작 알림
40
-			String str = "start";
41
-			//	전송할 객체 생성
42
-			DatagramPacket dp = new DatagramPacket(str.getBytes(), str.getBytes().length, ia, 9999);
43
-			//	시작 메세지를 전송
44
-			socket.send(dp);
45
-
46
-			//	파일의 내용을 저장할 배열
47
-			byte [] buffer = new byte[512];
48
-
49
-			//	모든 내용을 읽어서 전송
50
-			while(true){
51
-				int readSize = fis.read(buffer, 0, buffer.length);
52
-				if(readSize == -1)
53
-					break;
54
-				dp = new DatagramPacket(buffer, readSize , ia , 9999);
55
-				socket.send(dp);
56
-				
57
-
58
-			}
59
-			//	종료 메세지를 전송
60
-			str = "end";
61
-			dp = new DatagramPacket(str.getBytes(), str.getBytes().length, ia, 9999);
62
-			socket.send(dp);
63
-			fis.close();
64
-			socket.close();
65
-		}catch(Exception e){
66
-			System.out.println(e.getMessage());
67
-		}
68
-	}
69
-}

+ 89
- 0
src/kr/co/swh/lecture/network/filetrans/FileSendClientTCP.java 파일 보기

@@ -0,0 +1,89 @@
1
+package kr.co.swh.lecture.network.filetrans; 
2
+
3
+import java.io.BufferedInputStream;
4
+import java.io.DataOutputStream;
5
+import java.io.File;
6
+import java.io.FileInputStream;
7
+import java.io.IOException;
8
+import java.net.Socket;
9
+
10
+/**
11
+ * <pre>
12
+ * kr.co.swh.lecture.network.filetrans 
13
+ * FileSendClient.java
14
+ *
15
+ * 설명 :파일 전송 클라이언트
16
+ * </pre>
17
+ * 
18
+ * @since : 2018. 12. 28.
19
+ * @author : tobby48
20
+ * @version : v1.0
21
+ */
22
+public class FileSendClientTCP {
23
+	public static void main(String[] args) {
24
+        Socket socket = null;       
25
+        String serverIp = "127.0.0.1";
26
+        int serverPort = 8081;
27
+        String filename = "C:\\Users\\tobby48\\transfer-data.log";
28
+         
29
+        try {
30
+            // 서버 연결
31
+            socket = new Socket(serverIp, serverPort); // socket(),connect();
32
+            System.out.println("서버에 연결되었습니다.");
33
+  
34
+            FileSender fs = new FileSender(socket,filename);
35
+            fs.start();
36
+        } catch (IOException e) {
37
+            e.printStackTrace();
38
+        }
39
+    }
40
+}
41
+ 
42
+class FileSender extends Thread {
43
+    Socket socket;
44
+    DataOutputStream dos;
45
+    FileInputStream fis;
46
+    BufferedInputStream bis;
47
+    String filename;
48
+    int control = 0;
49
+    public FileSender(Socket socket,String filestr) {
50
+        this.socket = socket;
51
+        this.filename = filestr;
52
+        try {
53
+            // 데이터 전송용 스트림 생성
54
+            dos = new DataOutputStream(socket.getOutputStream());
55
+        } catch (IOException e) {
56
+            e.printStackTrace();
57
+        }
58
+    }
59
+  
60
+    @Override
61
+    public void run() {
62
+        try {
63
+            // 파일 내용을 읽으면서 전송
64
+            File f = new File(filename);
65
+            fis = new FileInputStream(f);
66
+            bis = new BufferedInputStream(fis);
67
+  
68
+            int len;
69
+            int size = 4096;
70
+            byte[] data = new byte[size];
71
+            while ((len = bis.read(data)) != -1) {
72
+                control++;
73
+                if(control % 10000 == 0)
74
+                {
75
+                    System.out.println("전송중..." + control/10000);      
76
+                }
77
+                dos.write(data, 0, len);
78
+            }
79
+  
80
+            dos.flush();
81
+            dos.close();
82
+            bis.close();
83
+            fis.close();
84
+            System.out.println("완료");
85
+        } catch (IOException e) {
86
+            e.printStackTrace();
87
+        }
88
+    }
89
+}

+ 93
- 0
src/kr/co/swh/lecture/network/filetrans/FileSendClientUDP.java 파일 보기

@@ -0,0 +1,93 @@
1
+package kr.co.swh.lecture.network.filetrans; 
2
+
3
+import java.io.File;
4
+import java.io.FileInputStream;
5
+import java.net.DatagramPacket;
6
+import java.net.DatagramSocket;
7
+import java.net.InetAddress;
8
+
9
+/**
10
+ * <pre>
11
+ * kr.co.swh.lecture.network.filetrans 
12
+ * FileSendClientUDP.java
13
+ *
14
+ * 설명 :파일 전송 클라이언트
15
+ * </pre>
16
+ * 
17
+ * @since : 2018. 12. 28.
18
+ * @author : tobby48
19
+ * @version : v1.0
20
+ */
21
+public class FileSendClientUDP {
22
+	public static final int DEFAULT_BUFFER_SIZE = 10000;
23
+	public static void main(String[] args) {
24
+		String serverIP = "127.0.0.1";
25
+		int port = 9999;
26
+		String FileName = "C:\\Users\\tobby48\\transfer-data.log";
27
+
28
+		File file = new File(FileName);
29
+		DatagramSocket ds = null;
30
+		if (!file.exists()) {
31
+			System.out.println("File not Exist");
32
+			System.exit(0);
33
+		}
34
+		long fileSize = file.length();
35
+		long totalReadBytes = 0;
36
+
37
+		double startTime = 0;  
38
+		try {
39
+			ds = new DatagramSocket();
40
+			InetAddress serverAdd = InetAddress.getByName(serverIP);
41
+			startTime = System.currentTimeMillis();
42
+			
43
+			//	start 신호 보내는 파트
44
+			String str = "start";
45
+			DatagramPacket dp = new DatagramPacket(str.getBytes(), str.getBytes().length, serverAdd, port);
46
+			ds.send(dp);	//	start 신호 전송
47
+
48
+			//	파일의 크기 보내는 파트
49
+			str = String.valueOf(fileSize);
50
+			dp = new DatagramPacket(str.getBytes(), str.getBytes().length, serverAdd, port);
51
+			ds.send(dp);	//	파일의 크기 전송
52
+
53
+			//	파일의 내용을 읽어 서버로 전송하는 파트
54
+			FileInputStream fis = new FileInputStream(file);
55
+			byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
56
+			while (true) {
57
+				Thread.sleep(10);
58
+				//	파일 내용 읽어오기
59
+				int readBytes = fis.read(buffer, 0, buffer.length);
60
+				if (readBytes == -1)
61
+					break;
62
+				//	파일의 내용을 서버로 전송
63
+				dp = new DatagramPacket(buffer, readBytes, serverAdd, port); // *
64
+				ds.send(dp);
65
+				
66
+				//	진행률 출력
67
+				totalReadBytes += readBytes;
68
+				System.out.println("In progress: " + totalReadBytes + "/"
69
+						+ fileSize + " Byte(s) ("
70
+						+ (totalReadBytes * 100 / fileSize) + " %)");
71
+
72
+			}
73
+			double endTime = System.currentTimeMillis();
74
+			double diffTime = (endTime - startTime)/ 1000;;
75
+			double transferSpeed = (fileSize / 1000)/ diffTime;
76
+
77
+			System.out.println("time: " + diffTime+ " second(s)");
78
+			System.out.println("Average transfer speed: " + transferSpeed + " KB/s");
79
+
80
+			str = "end";
81
+			dp = new DatagramPacket(str.getBytes(), str.getBytes().length, serverAdd, port);
82
+			ds.send(dp);
83
+			Thread.sleep(5000);
84
+			System.out.println("Process Close");
85
+			fis.close();
86
+			ds.close();
87
+
88
+		} catch (Exception e) {
89
+			System.out.println(e.getMessage());
90
+		}
91
+
92
+	}
93
+}