Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Truyền file bằng giao thức TCP và UDP

  1. #1
    Ngày gia nhập
    02 2011
    Bài viết
    5

    Post Truyền file bằng giao thức TCP và UDP

    mình xây dựng chương trình truyền file bằng cả TCP và UDP. Trên giao diện có 2 button là TCP và UDP. Khi nhấn nút này thì truyền theo gia thức này, khi bấm stop rồi bấm button kia chương trình sẽ dừng và truyền lại từ đầu theo giao thức kia.
    Cái mình ko hiểu là nếu như vậy trong class server, client sẽ có cả những phương thức thực hiện truyền file 1 bên là tcp, 1 bên là udp , chúng nằm chung vào thật rắc rối.. Mình cũng yếu lập trình OOP. Mấy bạn hình dung nó thế nào chỉ mình với. thanks
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Bạn cứ làm riêng từng cái đi, sau khi làm tốt từng cái rồi gửi thông tin, hoặc mã nguồn lên đây sẽ có người giúp bạn!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  3. #3
    Ngày gia nhập
    02 2011
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi Kevin Hoang Xem bài viết
    Bạn cứ làm riêng từng cái đi, sau khi làm tốt từng cái rồi gửi thông tin, hoặc mã nguồn lên đây sẽ có người giúp bạn!
    ok, mình sẽ cố gắng làm từng cái.. thánk nha!!

  4. #4
    Ngày gia nhập
    02 2011
    Bài viết
    5

    2 bài đó đây:
    TCP trước
    Code:
    // Client Class
    import java.io.*;
    import java.net.*;
    import java.util.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class client extends Frame {
    	public static String strHostAddress = "";
    	public static int intPortNumber = 0, intMaxClients = 0;
    	public static Vector vecConnectionSockets = null;
    	public static client objFileTransfer;
    	public static String strFileName = "",strFilePath = "";
    	public static Socket clientSocket = null;
    	public static ObjectOutputStream outToServer = null;
    	public static ObjectInputStream inFromServer = null;
    	public static void main (String [] args) throws IOException {
    		BufferedReader stdin = new BufferedReader(new InputStreamReader (System.in));
    		System.out.print("Nhap dia chi cua may server de ket noi: ");
    		System.out.flush();
    		strHostAddress = stdin.readLine();
    		System.out.print("Nhap dia chi cong de ket noi voi may server: ");
    		System.out.flush();
    		intPortNumber = Integer.parseInt(stdin.readLine());
    		objFileTransfer = new client();
    	}		
    	public Label lblSelectFile;
    	public Label lblTitle;
    	public Label lblStudentName;
    	public Label lblStudentClass;
    	public TextField tfFile;
    	public Button btnBrowse;
    	public Button btnSend;
    	public Button btnReset;
    	public client () {
    		setTitle("Chuong trinh truyen File phia Client");
    		setSize(400 , 300);
    		setLayout(null);
    		addWindowListener(new WindowAdapter () { public void windowClosing (WindowEvent e) { System.exit(0); } } );
    		lblTitle = new Label("Chuong trinh truyen File may Client ");
    		add(lblTitle);
    		lblTitle.setBounds(50,30,450,50);
    		lblSelectFile = new Label("Duong dan file can truyen:");
    		add(lblSelectFile);
    		lblSelectFile.setBounds(50,100,200,20);
    		lblStudentName = new Label("Sinh vien thuc hien:Pham Hong Thu");
    		add(lblStudentName);
    		lblStudentName.setBounds(130,250,200,20);
    		lblStudentClass = new Label("Lop : CT902");
    		add(lblStudentClass);
    		lblStudentClass.setBounds(130,270,100,20);
    		tfFile = new TextField("");
    		add(tfFile);
    		tfFile.setBounds(50,134,200,20);
    		btnBrowse = new Button("Chon File");
    		btnBrowse.addActionListener(new buttonListener());
    		add(btnBrowse);
    		btnBrowse.setBounds(283,133,70,20);
    		btnSend = new Button("Gui");
    		btnSend.addActionListener(new buttonListener());
    		add(btnSend);
    		btnSend.setBounds(100,200,50,20);
    		btnReset = new Button("Xoa");
    		btnReset.addActionListener(new buttonListener());
    		add(btnReset);
    		btnReset.setBounds(170,200,50,20);
    		show();
    
    		try {
    			clientSocket = new Socket (strHostAddress,intPortNumber);
    			outToServer = new ObjectOutputStream(clientSocket.getOutputStream());
    			outToServer.flush();
    			inFromServer = new ObjectInputStream(clientSocket.getInputStream());
    			int intFlag = 0;
    			while (true) {
    				Object objRecieved = inFromServer.readObject();
    				switch (intFlag) {
    				case 0:
    					if (objRecieved.equals("IsFileTransfered")) {
    						intFlag++;
    					}
    					break;
    				case 1:
    					strFileName = (String) objRecieved;
    					int intOption = JOptionPane.showConfirmDialog(this,clientSocket.getInetAddress().getHostName()+" dang gui "+strFileName+"!\nBan co chac chan nhan khong?","Thong bao",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);//xac nhan
    					if (intOption == JOptionPane.YES_OPTION) {
    						intFlag++;
    					} else {
    						intFlag = 0;
    					}
    					break;
    				case 2:
    					byte[] arrByteOfReceivedFile = (byte[])objRecieved;
    					FileOutputStream outToHardDisk = new FileOutputStream(strFileName); 
    					outToHardDisk.write(arrByteOfReceivedFile);
    					intFlag = 0; 
    					JOptionPane.showMessageDialog(this,"Ban dong y nhan file nay tu Server","Thong bao",JOptionPane.INFORMATION_MESSAGE);//file dc nhan;su chung thuc, su xac thuc
    					break;
    				}
    				Thread.yield();
    			}
    		} catch (Exception e) {System.out.println(e);}
    	}
    	public static String showDialog () {
    		FileDialog fd = new FileDialog(new Frame(),"Select File...",FileDialog.LOAD);
    		fd.show();
    		return fd.getDirectory()+fd.getFile();
    	}
    	private class buttonListener implements ActionListener {
    		public void actionPerformed (ActionEvent ae) {
    			byte[] arrByteOfSentFile = null;
    			if (ae.getSource() == btnBrowse) {
    				strFilePath = showDialog();
    				tfFile.setText(strFilePath);
    				int intIndex = strFilePath.lastIndexOf("\\");
    				strFileName = strFilePath.substring(intIndex+1);
    			}
    			if (ae.getSource() == btnSend) {
    				try {
    					FileInputStream inFromHardDisk = new FileInputStream (strFilePath);
    					int size = inFromHardDisk.available();
    					arrByteOfSentFile = new byte[size];
    					inFromHardDisk.read(arrByteOfSentFile,0,size);
    					outToServer.writeObject("IsFileTransfered");
    					outToServer.flush();
    					outToServer.writeObject(strFileName);
    					outToServer.flush();
    					outToServer.writeObject(arrByteOfSentFile);
    					outToServer.flush();
    					JOptionPane.showMessageDialog(null,"Ban da gui thanh cong file toi Server","Xac nhan",JOptionPane.INFORMATION_MESSAGE);
    				} catch (Exception ex) {} 
    			}
    			if (ae.getSource() == btnReset) {
    				tfFile.setText("");
    			}
    		}
    	}
    }
    class ThreadedConnectionSocket extends Thread {
    	public Socket connectionSocket;
    	public ObjectInputStream inFromClient;
    	public ObjectOutputStream outToClient;
    	public ThreadedConnectionSocket (Socket s) {
    		connectionSocket = s;
    		try {
    			outToClient = new ObjectOutputStream(connectionSocket.getOutputStream());
    			outToClient.flush();
    			inFromClient = new ObjectInputStream(connectionSocket.getInputStream( ));
    		} catch (Exception e) {System.out.println(e);}
    		start();
    	}
    	public void run () {
    		try {
    			int intFlag = 0;
    			String strFileName = "";
    			while (true) {
    				Object objRecieved = inFromClient.readObject();
    				switch (intFlag) {
    				case 0:
    					if (objRecieved.equals("IsFileTransfered")) {
    						intFlag++;
    					}
    					break;
    				case 1:
    					strFileName = (String) objRecieved;
    					int intOption = JOptionPane.showConfirmDialog(null,connectionSocket.getInetAddress().getHostName()+" dang gui "+strFileName+"!\nBan co chac chan nhan khong?","Thong bao",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
    					if (intOption == JOptionPane.YES_OPTION) {
    						intFlag++;
    					} else {
    						intFlag = 0;
    					}
    					break;
    				case 2:
    					byte[] arrByteOfReceivedFile = (byte[])objRecieved;
    					FileOutputStream outToHardDisk = new FileOutputStream(strFileName); 
    					outToHardDisk.write(arrByteOfReceivedFile);
    					intFlag = 0; 
    					JOptionPane.showMessageDialog(null,"Ban da gui thanh cong file toi Server","Xac nhan",JOptionPane.INFORMATION_MESSAGE);
    					break;
    				}
    				Thread.yield();
    			}
    		} catch (Exception e) {System.out.println(e);}
    	}
    }
    Code:
    import java.io.*;
    import java.net.*;
    import java.util.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class server extends Frame { 
    	public static String strHostAddress = "";
    	public static int intPortNumber = 0, intMaxClients = 0;
    	public static Vector vecConnectionSockets = null;
    	public static server objFileTransfer;
    	public static String strFileName = "",strFilePath = "";
    	public static Socket clientSocket = null;
    	public static ObjectOutputStream outToServer = null;
    	public static ObjectInputStream inFromServer = null;
    	public static void main (String [] args) throws IOException {
    		BufferedReader stdin = new BufferedReader(new InputStreamReader (System.in));
    		System.out.print("Chon so hieu cong de ket noi: ");
    		System.out.flush();
    		intPortNumber = Integer.parseInt(stdin.readLine());
    		System.out.print("So luong may Client co the ket noi: ");
    		System.out.flush();
    		intMaxClients = Integer.parseInt(stdin.readLine());
    		objFileTransfer = new server();
    	}
    	public Label lblSelectFile;
    	public Label lblTitle;
    	public Label lblStudentName;
    	public Label lblStudentClass;
    	public TextField tfFile;
    	public Button btnBrowse;
    	public Button btnSend;
    	public Button btnReset;
    	public server () {
    		setTitle("Chuong trinh truyen File phia Server");
    		setSize(400 , 300);
    		setLayout(null);
    		addWindowListener(new WindowAdapter () { public void windowClosing (WindowEvent e) { System.exit(0); } } );
    		lblTitle = new Label("Chuong trinh truyen File qua mang dua tren Socket TCP ");
    		add(lblTitle);
    		lblTitle.setBounds(50,30,450,50);
    		lblSelectFile = new Label("Duong dan file can truyen:");
    		add(lblSelectFile);
    		lblSelectFile.setBounds(50,100,200,20);
    		lblStudentName = new Label("Sinh vien thuc hien:titeo");
    		add(lblStudentName);
    		lblStudentName.setBounds(130,250,200,20);
    		lblStudentClass = new Label("Lop : t2");
    		add(lblStudentClass);
    		lblStudentClass.setBounds(130,270,100,20);
    		tfFile = new TextField("");
    		add(tfFile);
    		tfFile.setBounds(50,134,200,20);
    		btnBrowse = new Button("Chon File");
    		btnBrowse.addActionListener(new buttonListener());
    		add(btnBrowse);
    		btnBrowse.setBounds(283,133,70,20);
    		btnSend = new Button("Gui");
    		btnSend.addActionListener(new buttonListener());
    		add(btnSend);
    		btnSend.setBounds(100,200,50,20);
    		btnReset = new Button("Xoa");
    		btnReset.addActionListener(new buttonListener());
    		add(btnReset);
    		btnReset.setBounds(170,200,50,20);
    		show();
    		vecConnectionSockets = new Vector();
    		try {
    			ServerSocket welcomeSocket = new ServerSocket(intPortNumber,intMaxClients);
    			while (true) {
    				vecConnectionSockets.addElement(new ThreadedConnectionSocket(welcomeSocket.accept()));
    				Thread.yield();
    			}
    		} catch (IOException ioe) {System.out.println(ioe);}
    	}
    	public static String showDialog () {
    		FileDialog fd = new FileDialog(new Frame(),"Select File...",FileDialog.LOAD);
    		fd.show();
    		return fd.getDirectory()+fd.getFile();
    	}
    	private class buttonListener implements ActionListener {	
    		public void actionPerformed (ActionEvent ae) {
    			byte[] arrByteOfSentFile = null;
    			if (ae.getSource() == btnBrowse) {
    				strFilePath = showDialog();
    				tfFile.setText(strFilePath);
    				int intIndex = strFilePath.lastIndexOf("\\");
    				strFileName = strFilePath.substring(intIndex+1);
    			}
    			if (ae.getSource() == btnSend) {
    				try {
    					FileInputStream inFromHardDisk = new FileInputStream (strFilePath);
    					int size = inFromHardDisk.available();
    					arrByteOfSentFile = new byte[size];
    					inFromHardDisk.read(arrByteOfSentFile,0,size);
    					for (int i=0;i<vecConnectionSockets.size();i++) 
    					{
    						ThreadedConnectionSocket tempConnectionSocket = (ThreadedConnectionSocket)vecConnectionSockets.elementAt(i);
    						tempConnectionSocket.outToClient.writeObject("IsFileTransfered");
    						tempConnectionSocket.outToClient.flush();
    						tempConnectionSocket.outToClient.writeObject(strFileName);
    						tempConnectionSocket.outToClient.flush();
    						tempConnectionSocket.outToClient.writeObject(arrByteOfSentFile);
    						tempConnectionSocket.outToClient.flush();
    					}
    					JOptionPane.showMessageDialog(null,"Ban da gui thanh cong file toi Client","Xac nhan",JOptionPane.INFORMATION_MESSAGE);
    				} catch (Exception ex) {} 
    			}
    			if (ae.getSource() == btnReset) {
    				tfFile.setText("");
    			}
    		}
    	}
    	class ThreadedConnectionSocket extends Thread {
    		public Socket connectionSocket;
    		public ObjectInputStream inFromClient;
    		public ObjectOutputStream outToClient;
    		public ThreadedConnectionSocket (Socket s) {
    			connectionSocket = s;
    			try {
    				outToClient = new ObjectOutputStream(connectionSocket.getOutputStream());
    				outToClient.flush();
    				inFromClient = new ObjectInputStream(connectionSocket.getInputStream( ));
    			} catch (Exception e) {System.out.println(e);}
    			start();
    		}
    		public void run () {
    			try {
    				int intFlag = 0;
    				String strFileName = "";
    				while (true) {
    					Object objRecieved = inFromClient.readObject();
    					switch (intFlag) {
    					case 0:
    						if (objRecieved.equals("IsFileTransfered")) {
    							intFlag++;
    						}
    						break;
    					case 1:
    						strFileName = (String) objRecieved;
    						int intOption = JOptionPane.showConfirmDialog(null,connectionSocket.getInetAddress().getHostName()+" dang gui "+strFileName+"!\nBan co chac chan nhan khong?","Thong bao",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
    						if (intOption == JOptionPane.YES_OPTION) {
    							intFlag++;
    						} else {
    							intFlag = 0;
    						}
    						break;
    					case 2:
    						byte[] arrByteOfReceivedFile = (byte[])objRecieved;
    						FileOutputStream outToHardDisk = new FileOutputStream(strFileName); 
    						outToHardDisk.write(arrByteOfReceivedFile);
    						intFlag = 0; 
    						JOptionPane.showMessageDialog(null,"Ban da nhan thanh cong file tu Client","Xac nhan",JOptionPane.INFORMATION_MESSAGE);
    						break;
    					}
    					Thread.yield();
    				}
    			} catch (Exception e) {System.out.println(e);}
    		}
    	} 
    }
    - - - Nội dung đã được cập nhật ngày 21-05-2014 lúc 11:12 PM - - -

    UDP:
    Code:
    //Client Classs
    import java.io.*;
    import java.net.*;
     
    public class Client {
        private DatagramSocket socket = null;
        private FileEvent event = null;
        private String sourceFilePath = "D:/vd.txt";
        private String destinationPath = "D:/workspace";
        private String hostName = "localHost";
     
     
        public Client() {
     
        }
     
        public void createConnection() {
            try {
     
                socket = new DatagramSocket();
                InetAddress IPAddress = InetAddress.getByName(hostName);
                byte[] incomingData = new byte[1024];
                event = getFileEvent();
                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                ObjectOutputStream os = new ObjectOutputStream(outputStream);
                os.writeObject(event);
                byte[] data = outputStream.toByteArray();
                DatagramPacket sendPacket = new DatagramPacket(data, data.length, IPAddress, 9876);
                socket.send(sendPacket);
                System.out.println("File sent from client");
                DatagramPacket incomingPacket = new DatagramPacket(incomingData, incomingData.length);
                socket.receive(incomingPacket);
                String response = new String(incomingPacket.getData());
                System.out.println("Response from server:" + response);
                Thread.sleep(2000);
                System.exit(0);
     
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
     
        public FileEvent getFileEvent() {
            FileEvent fileEvent = new FileEvent();
            String fileName = sourceFilePath.substring(sourceFilePath.lastIndexOf("/") + 1, sourceFilePath.length());
            String path = sourceFilePath.substring(0, sourceFilePath.lastIndexOf("/") + 1);
            fileEvent.setDestinationDirectory(destinationPath);
            fileEvent.setFilename(fileName);
            fileEvent.setSourceDirectory(sourceFilePath);
            File file = new File(sourceFilePath);
            if (file.isFile()) {
                try {
                    DataInputStream diStream = new DataInputStream(new FileInputStream(file));
                    long len = (int) file.length();
                    byte[] fileBytes = new byte[(int) len];
                    int read = 0;
                    int numRead = 0;
                    while (read < fileBytes.length && (numRead = diStream.read(fileBytes, read,
                            fileBytes.length - read)) >= 0) {
                        read = read + numRead;
                    }
                    fileEvent.setFileSize(len);
                    fileEvent.setFileData(fileBytes);
                    fileEvent.setStatus("Success");
                } catch (Exception e) {
                    e.printStackTrace();
                    fileEvent.setStatus("Error");
                }
            } else {
                System.out.println("duong dan ko chi den 1 file");
                fileEvent.setStatus("co loi");
            }
            return fileEvent;
        }
     
        public static void main(String[] args) {
            Client client = new Client();
            client.createConnection();
        }
    }
    Code:
    import java.io.*;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
     
    public class Server {
        private DatagramSocket socket = null;
        private FileEvent fileEvent = null;
     
        public Server() {
     
        }
     
        public void createAndListenSocket() {
            try {
                socket = new DatagramSocket(9876);
                byte[] incomingData = new byte[1024 * 1000 * 50];
                while (true) {
                    DatagramPacket incomingPacket = new DatagramPacket(incomingData, incomingData.length);
                    socket.receive(incomingPacket);
                    byte[] data = incomingPacket.getData();
                    ByteArrayInputStream in = new ByteArrayInputStream(data);
                    ObjectInputStream is = new ObjectInputStream(in);
                    fileEvent = (FileEvent) is.readObject();
                    if (fileEvent.getStatus().equalsIgnoreCase("Error")) {
                        System.out.println("Some issue happened while packing the data @ client side");
                        System.exit(0);
                    }
                    createAndWriteFile();   // writing the file to hard disk
                    InetAddress IPAddress = incomingPacket.getAddress();
                    int port = incomingPacket.getPort();
                    String reply = "Thank you for the message";
                    byte[] replyBytea = reply.getBytes();
                    DatagramPacket replyPacket =
                            new DatagramPacket(replyBytea, replyBytea.length, IPAddress, port);
                    socket.send(replyPacket);
                    Thread.sleep(3000);
                    System.exit(0);
     
                }
     
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
     
        public void createAndWriteFile() {
            String outputFile = fileEvent.getDestinationDirectory() + fileEvent.getFilename();
            if (!new File(fileEvent.getDestinationDirectory()).exists()) {
                new File(fileEvent.getDestinationDirectory()).mkdirs();
            }
            File dstFile = new File(outputFile);
            FileOutputStream fileOutputStream = null;
            try {
                fileOutputStream = new FileOutputStream(dstFile);
                fileOutputStream.write(fileEvent.getFileData());
                fileOutputStream.flush();
                fileOutputStream.close();
                System.out.println("Output file : " + outputFile + " is successfully saved ");
     
     
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
     
        }
     
        public static void main(String[] args) {
            Server server = new Server();
            server.createAndListenSocket();
        }
    }
    Code:
    // Event Class
    import java.io.Serializable;
     
    public class FileEvent implements Serializable {
     
        public FileEvent() {
        }
     
        private static final long serialVersionUID = 1L;
     
        private String destinationDirectory;
        private String sourceDirectory;
        private String filename;
        private long fileSize;
        private byte[] fileData;
        private String status;
     
        public String getDestinationDirectory() {
            return destinationDirectory;
        }
     
        public void setDestinationDirectory(String destinationDirectory) {
            this.destinationDirectory = destinationDirectory;
        }
     
        public String getSourceDirectory() {
            return sourceDirectory;
        }
     
        public void setSourceDirectory(String sourceDirectory) {
            this.sourceDirectory = sourceDirectory;
        }
     
        public String getFilename() {
            return filename;
        }
     
        public void setFilename(String filename) {
            this.filename = filename;
        }
     
        public long getFileSize() {
            return fileSize;
        }
     
        public void setFileSize(long fileSize) {
            this.fileSize = fileSize;
        }
     
        public String getStatus() {
            return status;
        }
     
        public void setStatus(String status) {
            this.status = status;
        }
     
        public byte[] getFileData() {
            return fileData;
        }
     
        public void setFileData(byte[] fileData) {
            this.fileData = fileData;
        }
    }
    - - - Nội dung đã được cập nhật ngày 21-05-2014 lúc 11:13 PM - - -

    Không thấy nút đính file nguồn chỗ nào, nếu thấy chướng mắt mọi người bỏ qua
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn