tr-demoscene
the scene => coding => pc => Konuyu başlatan: endo - 04.08.2010 12:16:16
-
Selamlar, malumunuz network üzerinden dosya göndermek her daim problemlidir, uğraştırır, çeşitli libraryler vardır, kendiniz yazarsınız vs.
Windows için aşağıdaki şu API çok kullanışlı, ihtiyaç duyan olur kesin diye yazayım dedim: (win2k ve sonrasında destekleniyor)
http://msdn.microsoft.com/en-us/library/ms740565.aspx
BOOL TransmitFile(
SOCKET hSocket,
HANDLE hFile,
DWORD nNumberOfBytesToWrite,
DWORD nNumberOfBytesPerSend,
LPOVERLAPPED lpOverlapped,
LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers,
DWORD dwFlags
);
socket ve file handle'larını verip dosyayı gönderebiliyorsunuz. Async de çalışabiliyor.
Linuxteki SendFile gibi. (http://tautology.org/software/man/sendfile)
-
ama filesize'ı DWORD olarak kullanırsak, unsigned da olmadığı durumda ben bu fonksiyonla 2 GB'dan büyük dosyaları filesystem desteklese bile gönderemem ki. oldu mu şimdi? öngürüsüzlük işte noolcek. :p
-
suna dikkat etmek lazim:
Workstation and client versions of Windows optimize the TransmitFile function for minimum memory and resource utilization by limiting the number of concurrent TransmitFile operations allowed on the system to a maximum of two. On Windows Vista, Windows XP, Windows 2000 Professional, and Windows NT Workstation 3.51 and later only two outstanding TransmitFile requests are handled simultaneously; the third request will wait until one of the previous requests is completed.
-
haklisin ssg, bi yonden de bu iyi bi ozellik olabilir, yani 10 dosya birden gondermeye calisinca kendimiz bi queue yapmak zorunda kalmayiz ve bantin tumunu iki dosya icin kullanmis oluruz.
dikkat edilmesi gereken iyi bi ozellik :)