मैंने ऐप्पल की वेबसाइट से WiTap कोड डाउनलोड किया। यह स्थानीय वाईफाई नेटवर्क पर डेटा स्थानांतरित करने के लिए है। मैं क्लाइंट - सर्वर आर्किटेक्चर के रूप में बातचीत करने के लिए एक परियोजना में काम कर रहा हूं। मैं क्लाइंट साइड से सर्वर पर एनएसडीटा भेज रहा हूं।आईओएस में वाईफाई पर बड़ी फ़ाइलों को कैसे स्थानांतरित करें
मैंने 2 परियोजनाएं की हैं; ग्राहक के लिए और एक सर्वर
ग्राहक के पक्ष परियोजना पर के लिए, मैं मैं निम्नलिखित विधि जोड़कर AppController.m फ़ाइल को संशोधित परिवर्तन निम्नलिखित है कि के लिए बनाया
AppController.m (क्लाइंट साइड)
- (void)sendData:(NSData*)pobjData
{
assert(self.streamOpenCount == 2);
if ([self.outputStream hasSpaceAvailable])
{
NSInteger bytesWritten;
NSUInteger length = [pobjData length];
bytesWritten = [self.outputStream write:[pobjData bytes] maxLength:[pobjData length]];
NSLog(@"written bytes -> %d",bytesWritten);
}
}
फिर इस विधि को कॉल करके मैं डेटा भेजता हूं।
सर्वर साइड परियोजना में, मैं निम्नलिखित है कि के लिए chagnes मैं निम्नलिखित विधि
AppController.m (सर्वर साइड)
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode
{
#pragma unused(stream)
switch(eventCode) {
case NSStreamEventOpenCompleted: {
self.streamOpenCount += 1;
assert(self.streamOpenCount <= 2);
// Once both streams are open we hide the picker and the game is on.
if (self.streamOpenCount == 2) {
[self dismissPicker];
[self.server deregister];
}
} break;
case NSStreamEventHasSpaceAvailable: {
assert(stream == self.outputStream);
// do nothing
} break;
case NSStreamEventHasBytesAvailable:
{
if (stream == self.inputStream)
{
NSInteger bytesRead;
uint32_t buffer[32768];
NSMutableData *_data = [NSMutableData data];
// Pull some data off the network.
bytesRead = [self.inputStream read:buffer maxLength:sizeof(buffer)];
if (bytesRead == -1) {
} else if (bytesRead == 0) {
} else {
// FIXME: Popup an alert
const long long expectedContentLength = bytesRead;
NSUInteger expectedSize = 0;
// expectedContentLength can be represented as NSUInteger, so cast it:
expectedSize = (NSUInteger)expectedContentLength;
[_data appendBytes:buffer length:expectedSize];
NSLog(@"\"Data received has length: %d", _data.length);
[self performSelector:@selector(getData:) withObject:_data afterDelay:1.0];
}
}
}
break;
default:
assert(NO);
// fall through
case NSStreamEventErrorOccurred:
// fall through
case NSStreamEventEndEncountered: {
[self setupForNewGame];
} break;
}
}
संशोधित करके AppController.m फ़ाइल को संशोधित कर दिया और एक विधि जोड़ा प्राप्त डेटा को
#define kUserDirectoryPath NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)
-(void)getData:(NSMutableData *)pData
{
NSFileManager *tmpmanager = [NSFileManager defaultManager];
[tmpmanager createFileAtPath:[AppController getDocumentDirectoryPath:[NSString stringWithFormat:@"%@.png",[NSDate date]]] contents:pData attributes:nil];
}
+(NSString*)getDocumentDirectoryPath:(NSString*)pStrPathName
{
NSString *strPath=nil;
if(pStrPathName)
strPath = [[kUserDirectoryPath objectAtIndex:0] stringByAppendingPathComponent:pStrPathName];
return strPath;
}
मैं .png फ़ाइलों को NSData में परिवर्तित करता हूं और उन्हें क्ल से भेजता हूं सर्वर पक्ष के लिए ient पक्ष। सर्वर दस्तावेज़ निर्देशिका
मामले को डाउनलोड करता है, जब मैं क्लाइंट पक्ष से फ़ाइल स्थानांतरित करता हूं, तो यह दस्तावेज़ निर्देशिका में सर्वर पक्ष में डाउनलोड हो जाता है। छोटी फाइलों के मामले में सब कुछ ठीक काम करता है। यदि फ़ाइल का आकार 8kb से अधिक हो गया है, तो दस्तावेज़ निर्देशिका में लिखी गई फ़ाइल दूषित हो जाती है।
कृपया मुझे बड़ी फाइलें भेजने में सक्षम होने में मदद करें।
मैंने इसे पहले कोशिश की लेकिन उस मामले में मुझे भी एक ही समस्या का सामना करना पड़ा। मैं यूडीपी पर स्थानांतरित करता था, वहां भी मैं 9 केबी से बड़ी फाइल नहीं भेज सका .. – HarshIT
https://github.com/robbiehanson/CocoaAsyncSocket CocoaAsyncSocket के लिए आधिकारिक गिटहब रेपो है। – zadr
@zadr हाँ दोस्त, मैंने एक ही कोड का उपयोग किया। ..... – HarshIT