ich heruntergeladen WiTap-Code von der Apple-Website übertragen. Es ist für die Übertragung von Daten über lokale WLAN-Netzwerk. Ich arbeite in einem Projekt, um als Client - Server - Architektur zu interagieren. Ich sende NSData von Clientseite an Server.Wie große Dateien über Wi-Fi in iOS
Ich habe 2 Projekte; ein für die Kunden und ein für Server
Auf Client-Seite Projekt habe ich Änderungen folgende Für, dass ich die AppController.m Datei
durch Zugabe folgende Methode modifizierteAppController.m (Client-Seite)
- (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);
}
}
Dann durch den Aufruf dieser Methode Daten senden.
Am Server Nebenprojekt habe ich chagnes für die folgenden ich die Datei AppController.m
AppController.m (Serverseite) durch Modifizieren folgende Verfahren ein Verfahren modifiziert
- (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;
}
}
hinzugefügt und um die empfangenen Daten als Datei zu schreiben
Ich konvertiere .png Dateien zu NSData und sende sie von cl auf der Serverseite. der Server lädt die Datei in Dokumentenverzeichnis
Die Sache ist, wenn ich Datei von Client-Seite übertragen, um es zu Server-Seite bei Dokumentenverzeichnis heruntergeladen wird. Bei kleinen Dateien funktioniert alles. Wenn die Dateigröße 8 KB überschreitet, wird die im Dokumentenverzeichnis geschriebene Datei beschädigt.
Bitte helfen Sie mir der Lage sein, große Dateien zu senden.
Ich habe es zuerst versucht, aber in diesem Fall auch ich sah das gleiche Problem. Ich habe über UDP übertragen, dort konnte ich auch keine Dateien größer als 9 kB .. – HarshIT
https://github.com/robiehanson/CocoaAsyncSocket ist das offizielle GitHub Repo für CocoaAsyncSocket. – zadr
@zadr ja Alter, ich habe den gleichen Code verwendet. ..... – HarshIT