9
votes

Comment envoyer Nstring via une prise à l'aide de NsoutPutStream

Je dois créer une application de discussion pour iOS à l'aide de la programmation de la prise et que mon adresse IP est 192.168.0.57:9300 . J'ai utilisé Raywenderlich Exemple de programmation de socket, la réception de données fonctionnant correctement mais l'envoi ne fonctionne pas, il n'y a aucune erreur ni crash. Mon code est comme suit.

code pour les flux d'ouverture xxx

code pour l'envoi de données xxx

délégués xxx

veuillez me fournir une suggestion.


7 commentaires

Que voulez-vous dire avec "il montre la chaîne d'envoi"? Le récepteur montre-t-il comme ça? Quel est le récepteur (quel logiciel, extrait de post source si possible)? Comment traitez-vous la chaîne reçue?


J'ai attaché à tous les codes.Server code sont écrits en PHP


J'ai utilisé votre code exact pour initialiser une connexion et envoyer du trafic réseau d'un iPhone à mon Mac. Le logiciel de réception est écrit dans l'objectif C et également à l'aide de Nstreams. Toutes les chaînes transmises étaient ok. Je suppose que votre problème peut être du côté serveur (PHP). Avez-vous été capable de vérifier (avec un autre logiciel pour envoyer des chaînes) que votre rôle de serveur fonctionne?


@ nullp01nter salut je fais aussi cela dans Android, ça marche bien dans Android en utilisant le même serveur PHP


Utilisez le code PHPWebsocket d'utilisation du serveur qui peut être téléchargé à partir d'ici code.google.com/p/ PHP-WebSocket-Server - code.google.com/ p / php-websocket-serveur / wiki / script


Avez-vous eu un moyen de sortir, je reçois cela: Server a déclaré:: {"Type": "Usermsg", "nom": null, "message": null, "couleur": null}


Dans mon code de cas ne pénètre pas dans la section NstremeewehasbyteSaVailable. Qu'est-ce qui pourrait être une raison?


3 Réponses :


5
votes

Vous devez ajouter le "\ n" à la fin de votre réponse, comme celui-ci:

- (IBAction)sendMessage:(id)sender
{
        NSString *response  = @"lets start chat\n";
        ////your code
}


1 commentaires

Ajouter \ n ne le répare pas pour moi. Ce problème me dérange vraiment parce qu'il est si simple d'envoyer les commandes dans le terminal! Ma commande a cité que je marque avec \ ", alors peut-être que c'est un problème?



1
votes

J'ai eu un problème similaire. Je l'ai résolu en ajoutant un nouveau caractère de nouvelle ligne et de ligne de ligne dans la chaîne.

- (IBAction)sendMessage:(id)sender {

        NSString *response  = @"lets start chat\r\n\r\n";
        NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSASCIIStringEncoding]];
        [outputStream write:[data bytes] maxLength:[data length]]; 
}


0 commentaires

1
votes

J'ai trouvé écrire un fil séparé résolu ce problème pour moi.
A du sens comme il ne faut pas vraiment faire des opérations de réseau sur le fil principal.
Voici mon code:

dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0), ^(void) {
    NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSASCIIStringEncoding]];
    NSInteger len = [outputStream write:[data bytes] maxLength:[data length]];
    NSLog(@"Len = %ld", len);
});


0 commentaires