الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

UDP File Transfer

بدأه reem elsaba في 31 أكتوبر 2010 · 7 رد · 1,083 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله تعالى وبركاته

المطلوب عمل كود لنقل ملف صورة او ملف نص من المرسل للمستقبل اي client to server باستخدام طريقة UDP File Transfer

وعملت الكود ولكن للاسف مابينقل الملف بس اعمل run للكود

وهي الكود ..

receiver

import java.io.*;
import java.net.*;

class Receiver {

	public static void main(String args[]) throws Exception
	{
		//create a datagram socket and bind it with a suitable port
		DatagramSocket socket = new DatagramSocket(3000);
		//array of byte used to store received data
		byte[] receiveData = new byte[128];

		System.out.println("Waiting for client file ...\n");

		// create an empty datagramPacket to store received data and length
		DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

		socket.receive(receivePacket);

		String sentence = new String(receivePacket.getData());

                	FileOutputStream outStream = new FileOutputStream("image.GIF");

	}
}

أما كود الـ client وفيه أخطاء :(

import java.io.*;
import java.net.*;

class Sender {
    private static Object sendData;
    private static Object clientSocket;
	public static void main(String args []) throws Exception
	{

		//create a datagram socket
		DatagramSocket socket = new DatagramSocket();
		//get the IP address of the receiver
		InetAddress IP = InetAddress.getByName("localhost");
		//array of byte to store data
                FileInputStream fileIn = new FileInputStream("image.GIF");
                long fileLen =  (new File("image.GIF")).length();
                int intFileLen = (int)fileLen;
		byte[] byteArray = new byte[intFileLen];
                fileIn.read(byteArray);
                fileIn.close();

		sendData = sentence.getBytes();
		//create a datagram packet and give it the requierd parameters
		DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IP, 3000);
		//function used to send data 

                socket.send(sendPacket);

		// close the datagramsocket and terminate the connection

                clientSocket.close();
	}
}

إذا حد ممكن يقولي وين الخطأ .. بكون ممنونه له كثير

يا عبدي اطْلُبْني دائِماً و اجتَهِدْ

تُعْطَى لكْ جنَّاتُ عدْنٍّ لِلأَبدْ

في جوار نبيٍّ اسمُهُ أحمدْ

طُوبَى لكْ طُوبَى لكْ إِن صحْ لكْ هذا الْقَبولْ

#2

حضرتك معرفه

private static Object sendData;
private static Object clientSocket;

اول متغير اللى هو sendData المفروض على حسب فهمى للكود انه يكون byte array

والمتغير الاخر clientSocket المفروض يكون Sokect

ازاى الاتنين تعمليهم Object

وكمان حضرتك قفلتى الclientSocket وحضرتك اساسا مش استخدمتيه ولا تم عمل له new

clientSocket.close();

وكمان هو مش شايف الداله close لانها موجوده فى الـSokect وليس فى الـ Object

وايه هى كلمه sentence

sendData = sentence.getBytes();

طبعا فيه خطا فى الـ sendData.length لان الـlength موجوده فقط فى الـ arrays وليس فى الـ Object

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IP, 3000);

اتمنى ان تقومى بتصليح الكود مره اخرى وان شاء الله توفقين فى ذلك

بالتوفيق:)

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 31 أكتوبر 2010 في 20:23

Software Developer
Mahmoudkelany.com


 

#3
Mahmoud Kelany كتب:

حضرتك معرفه

private static Object sendData;
private static Object clientSocket;

اول متغير اللى هو sendData المفروض على حسب فهمى للكود انه يكون byte array

والمتغير الاخر clientSocket المفروض يكون Sokect

ازاى الاتنين تعمليهم Object

وكمان حضرتك قفلتى الclientSocket وحضرتك اساسا مش استخدمتيه ولا تم عمل له new

clientSocket.close();

وكمان هو مش شايف الداله close لانها موجوده فى الـSokect وليس فى الـ Object

وايه هى كلمه sentence

sendData = sentence.getBytes();

طبعا فيه خطا فى الـ sendData.length لان الـlength موجوده فقط فى الـ arrays وليس فى الـ Object

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IP, 3000);

اتمنى ان تقومى بتصليح الكود مره اخرى وان شاء الله توفقين فى ذلك

بالتوفيق:)

بارك الله بك اخي الكريم ..

عذبتك معي

يا عبدي اطْلُبْني دائِماً و اجتَهِدْ

تُعْطَى لكْ جنَّاتُ عدْنٍّ لِلأَبدْ

في جوار نبيٍّ اسمُهُ أحمدْ

طُوبَى لكْ طُوبَى لكْ إِن صحْ لكْ هذا الْقَبولْ

#4
reem elsaba كتب:

بارك الله بك اخي الكريم ..

عذبتك معي

وبارك فيكى يارب

لا ولايهمك كلنا هنا فالخدمه :)

Software Developer
Mahmoudkelany.com


 

#5

السلام عليكم أخي محمود

بالنسبة للأخطاء يلي ظهرت بالكود رح حاول فيها

بس انت عم تسال ليش استخدمت object هي المس هيك بدها وانا جربت بـ TCP File Transfer وزبط معي ومية المية

وهي الاكواد فيك تطلع عليهم و لكن المشكلة عندي بـ UDP File Transfer

Server

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class Reciever
{
	public static void main(String[] args) throws Exception
	{

		try
		{
			//create a socket with the agreed port
			Socket link = new Socket("localhost",3000);
			//create ObjectOutputStream that enable us to buffer array of bytes 
			ObjectInputStream inStream = new ObjectInputStream(link.getInputStream());
			//create a array of bytes with the inputStream length (length of recieved array)
			byte[] byteArray = (byte[])inStream.readObject();
			//output stream for writing data to a File
	      	FileOutputStream outStream = new FileOutputStream("image.GIF");
	      	//Write byteArray to this file output stream
			outStream.write(byteArray);			
			//close the connection
			link.close();
		}
		catch(IOException e)
		{
			System.out.println("error...");
		}
	}
}

Client

import java.io.*;
import java.net.*;
import javax.swing.*;
import java.util.Scanner;

public class Sender
{
	//declare a ServerSocket
	private static ServerSocket serverSocket;

	public static void main(String[] args)
	{
		System.out.println("Opening port...\n");

		try
		{
			//create a ServerSocket with a port number 3000
			serverSocket = new ServerSocket(3000);
		}
		catch(IOException ioEx)
		{
			System.out.println("Unable to attach to port!");
			System.exit(1);
		}

		try
		{
			//create a new socket to connect with client and accept the connection 
			Socket link = serverSocket.accept();
			//create ObjectOutputStream that enable us to buffer array of bytes 
			ObjectOutputStream outStream = new ObjectOutputStream(link.getOutputStream());
			//creat FileInputStream to obtain input bytes from a file
			FileInputStream fileIn = new FileInputStream("image.GIF");
			//get the file length
			long fileLen =  (new File("image.GIF")).length();
			//convert the length to int
			int intFileLen = (int)fileLen;
			//create an array of byte with the file length
			byte[] byteArray = new byte[intFileLen];
			//Read bytes of data from this input stream into an array of bytes
			fileIn.read(byteArray);
			//close this file input stream
			fileIn.close();
			//write the array of byte to the buffer (ObjectOutputStream)
			outStream.writeObject(byteArray);
		}
		catch(IOException e)
		{
			System.out.println("error...");
		}
	}
}

وبارك الله بك :)

يا عبدي اطْلُبْني دائِماً و اجتَهِدْ

تُعْطَى لكْ جنَّاتُ عدْنٍّ لِلأَبدْ

في جوار نبيٍّ اسمُهُ أحمدْ

طُوبَى لكْ طُوبَى لكْ إِن صحْ لكْ هذا الْقَبولْ

#6

مرحبا , أخي محمود جربت بالأكواد والحمد لله زبطت معي

بس الهدف من الاكواد ان ينقل ملف الصورة بس للاسف ما عم ينقل

بقى شو بتطلع المشكلة

هي الاكواد

SERVER

import java.io.*;
import java.net.*;

class Receiver {

	public static void main(String args[]) throws Exception
	{
		//create a datagram socket and bind it with a suitable port
		DatagramSocket socket = new DatagramSocket(3000);
		//array of byte used to store received data
		byte[] receiveData = new byte[128];

		System.out.println("Waiting for client file ...\n");

		// create an empty datagramPacket to store received data and length
		DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

		socket.receive(receivePacket);

		String sentence = new String(receivePacket.getData());

                	FileOutputStream outStream = new FileOutputStream("image.GIF");

	}
}

CLIENT

import java.io.*;
import java.net.*;

class Sender {


	public static void main(String args []) throws Exception
	{

		//create a datagram socket
		DatagramSocket socket = new DatagramSocket();
		//get the IP address of the receiver
		InetAddress IP = InetAddress.getByName("localhost");
		//array of byte to store data
                FileInputStream fileIn = new FileInputStream("image.GIF");
                long fileLen =  (new File("image.GIF")).length();
                int intFileLen = (int)fileLen;
		byte[] byteArray = new byte[intFileLen];
                fileIn.read(byteArray);
                fileIn.close();

    }
}

يا عبدي اطْلُبْني دائِماً و اجتَهِدْ

تُعْطَى لكْ جنَّاتُ عدْنٍّ لِلأَبدْ

في جوار نبيٍّ اسمُهُ أحمدْ

طُوبَى لكْ طُوبَى لكْ إِن صحْ لكْ هذا الْقَبولْ

#7

فين الاتصال الموجود فى الـ Client cide ؟؟؟؟

وفى السيرفر المفروض انك تأخذى Stream من هذا الاتصال وتستقبلى من عليه البيانات

وبعدها تخزنى البيانات دى على الهارد عندك ويكون امتداد الملف مثلا image.jpg وتكتبى في هذا الملف اللى انتى استقبلتيه

وكدا الملف يكون وصل سليم

Software Developer
Mahmoudkelany.com


 

#8
Mahmoud Kelany كتب:

فين الاتصال الموجود فى الـ Client cide ؟؟؟؟

وفى السيرفر المفروض انك تأخذى Stream من هذا الاتصال وتستقبلى من عليه البيانات

وبعدها تخزنى البيانات دى على الهارد عندك ويكون امتداد الملف مثلا image.jpg وتكتبى في هذا الملف اللى انتى استقبلتيه

وكدا الملف يكون وصل سليم

:unsure:

يا عبدي اطْلُبْني دائِماً و اجتَهِدْ

تُعْطَى لكْ جنَّاتُ عدْنٍّ لِلأَبدْ

في جوار نبيٍّ اسمُهُ أحمدْ

طُوبَى لكْ طُوبَى لكْ إِن صحْ لكْ هذا الْقَبولْ

مواضيع مشابهة