String versenden über TCP/IP mit Objectiv-C

Gast #1331981
Lesenswert?

Hallo Community

Ich möchte über TCP/IP einen String an einen Server versenden. Plattform 
ist MacOS X 10.5, Programmiersprache Objectiv-C. Die Verbindung mit dem 
Server kann ich aufbauen, der Socket steht also. Nun weiss ich aber 
nicht ob mit der von mir verwendeten Methode überhaupt ein String raus 
geht. Auf jedenfall kommt nichts beim Server an! Deshalb meine Frage an 
euch: Wie könnte ich überprüfen ob und was da über meine TCP-Verbindung 
raus geht. Und meine zweite Frage: Wenn da tatsächlich nichts rausgeht, 
was mach ich falsch??
Hat hier jemand Erfahrung mit Objectiv-C?


Hier noch mein Code:
1
- (IBAction)searchForSite 
2
{ 
3
   NSString *urlStr = @"192.168.1.21"; //server IP
4
   NSHost *host = [NSHost hostWithName:urlStr]; 
5
   NSString *sendData = @"IP_ClIENT_OPEN"; //String to send
6

7
   //create iStream and oStream objects and set port-nr
8
   [NSStream getStreamsToHost:host port:1319 inputStream:&iStream outputStream:&oStream]; 
9

10
   //open input-stream and output-stream
11
   [iStream retain]; 
12
   [oStream retain]; 
13
   [iStream setDelegate:self]; 
14
   [oStream setDelegate:self]; 
15
   [iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
16
   [oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
17
   [iStream open]; 
18
   [oStream open];
19

20
   if (iStream) {
21
      NSLog (@"Streamevent bytes");
22
      uint8_t *buf[1024];
23
      unsigned int len = 0;
24
      len = [(NSInputStream *)iStream read:buf maxLength:1024];
25
      NSLog(@"Puffer: %s",buf);
26
      NSData *data = [NSData dataWithBytes:(const void *)buf length:len];
27
      if (data) {
28
         NSLog(@"Data: %@",data);
29
      }
30
      NSString *part = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
31
      NSLog (@"Part %p",part);
32
      [oStream write:sendData maxLength:strlen(sendData)];
33
      NSLog(@"End");
34
   }
35
}

Gruss
Pascal
Persönliche Seite #1332070
Lesenswert?

Mit Objective-C habe ich mich noch nicht auseinandergesetzt, auch wenn 
das als einer der nächsten Weiterbildungspunkte auf der Tagesordnung 
steht.

Daher nur etwas uninformiertes Raten:

Ist "IP_ClIENT_OPEN" ein Tippfehler? (kleines 'l')

Dann wertest Du anscheinend die korrekte Erzeugung von iStream aus, 
aber nicht die von oStream, ist das beabsichtigt?
Gast #1332153
Lesenswert?

Da ist tatsächlich ein Tippfehler in meinem String. Aber der tut im 
Moment noch nichts zur Sache, denn der String kommt noch gar nicht beim 
Server an.

Ja das ist richtig, hier werte ich nur iStream aus. Ich habe hier der 
lesbarkeit halber nicht den gesamten Code gepostet. Ob die Objekte 
iStream und oStream richtig geöffnet wurden frage ich vorher schon ab. 
Diese Methode schrieb ich eigentlich erst nur für den ausgehenden 
Datenstrom. Da ich aber schlussendlich die Kommunikation auf beiden 
Seiten brauche habe ich hier noch oStream hinein genommen um zu testen 
ob die Kommunikation auch funktioniert.
Tut sie eben nicht und ich weiss einfach nicht wieso. Vorallem bin ich 
mir auch gar nicht so sicher ob wirklich nichts rausgeht. Ich wüsste 
nicht wie ich das Prüfen sollte!?
Gast #1332540
Lesenswert?

Der PaketAnalyzer für Mac:
http://www.tastycocoabytes.com/cpa/index.php

Ich glaube ich bin ein kleiner Schritt weiter gekommen um mein Problem 
zu lösen. Allerdings stehe ich auch dort wieder an.
Mein Problem ist wahrscheinlich beim Event-Handling von Streams zu 
suchen. Wenn ich den Stream geöffnet habe muss ich ihn mit 
Event-Handling irgendwie beschäftigen. Ich hätte zwar ein gutes Dokument 
dazu gefunden 
(http://developer.apple.com/documentation/Cocoa/Conceptual/Streams/Streams.pdf), 
aber ich kapier das Event-Handling überhaupt. Was ist die Idee hinter 
dem Event-Handling? Und wie bindet man das ein?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren