مرحبا
احاول نقل ملف من والي client - server
بمعنى برنامج بسيط يقوم بـ download و upload
قدرت اسوي تنزيل للملف بدون مشاكل واظن رفع الملف للسيرفر ماراح تواجهني مشكله كبري
مشكلتي الاساسيه في انني احتاج الى ان اتواصل مع السيرفر عبر الرسائل .. مثلا ارسل له رساله اقول له "احتاج تنزيل الملف الفلاني ارسله لي" او مثلا "سوف ارسل لك ملف جهز نفسك"
من الخارج قد يبدو للبعض انه لاتوجد مشكله
لكن بعد كتابة الكود اتضح لي انه لايوجد الا قناه واحده للتواصل وهنا تظهر المشكله بالنسبه لي
هل استخدمها في تبادل الرسائل مع السيرفر او استخدمها لنقل البيانات "الملف بذاته"
توضيح اكثر
فرض ارسلت للسيرفر رساله تحتوي على "upload" وينفس الوقت ارغب في ارسال الملف نفسه الى السيرفر فكيف افصل هذه الرساله عن الملف بذاته بحيث السيرفر يعرف انه هذي رساله او هذي بيانات ملف
الكود حفي فيه مشاكل اخرى وطويل وممكن يتعب بقراءته لذلك لا اعتقد ان من المجدي نشره هنا
لكن في كود مشهور وبسيط يوضح الفكره ومككن يستفاد منه هنا
في هذا الكود فقط تنزل الملف لكن بدون تبادل رسائل بين server و الـ client
server
import java.net.*;
import java.io.*;
public class FileServer {
public static void main (String [] args ) throws IOException {
// create socket
ServerSocket servsock = new ServerSocket(13267);
while (true) {
System.out.println("Waiting...");
Socket sock = servsock.accept();
System.out.println("Accepted connection : " + sock);
// sendfile
File myFile = new File ("source.pdf");
byte [] mybytearray = new byte [(int)myFile.length()];
FileInputStream fis = new FileInputStream(myFile);
BufferedInputStream bis = new BufferedInputStream(fis);
bis.read(mybytearray,0,mybytearray.length);
OutputStream os = sock.getOutputStream();
System.out.println("Sending...");
os.write(mybytearray,0,mybytearray.length);
os.flush();
sock.close();
}
}
}client
import java.net.*;
import java.io.*;
public class FileClient{
public static void main (String [] args ) throws IOException {
int filesize=6022386; // filesize temporary hardcoded
long start = System.currentTimeMillis();
int bytesRead;
int current = 0;
// localhost for testing
Socket sock = new Socket("127.0.0.1",13267);
System.out.println("Connecting...");
// receive file
byte [] mybytearray = new byte [filesize];
InputStream is = sock.getInputStream();
FileOutputStream fos = new FileOutputStream("source-copy.pdf");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bytesRead = is.read(mybytearray,0,mybytearray.length);
current = bytesRead;
do {
bytesRead =
is.read(mybytearray, current, (mybytearray.length-current));
if(bytesRead >= 0) current += bytesRead;
} while(bytesRead > -1);
bos.write(mybytearray, 0 , current);
bos.flush();
long end = System.currentTimeMillis();
System.out.println(end-start);
bos.close();
sock.close();
}
}اي مساعده او نصيحه او تفكير بصوت عالي راح تساعدني
تحيتي