Ich bin (relativ verzweifelt) dabei, folgenden C-Code, der zur Datenübertragung mittels Sockels verwendet wird in die NSStream-Welt von Objective-C zu übersetzen.
Wichtig wäre zum Beispiel, dass folgender reqCurrentTime Request mit meinem NSOutputStream funktioniert.
Im Debugger bekomme ich die Rückmeldung, dass die NSStream Sockels erfolgreich geöffnet wurden, der Server (ein proprietäres System) antwortet jedoch nicht.
Ich vermute, dass meine Portierung von EncodeField nicht korrekt ist und würde mich sehr freuen, wenn Ihr Tips oder Hinweise für mich hättet...
Vielen herzlichen Dank im voraus!
C-Code:
Alles anzeigen
Alles anzeigen
Konstanten-Definition:
Das ist meine aktuelle Portierung:
Alles anzeigen
</int></bool>
Wichtig wäre zum Beispiel, dass folgender reqCurrentTime Request mit meinem NSOutputStream funktioniert.
Im Debugger bekomme ich die Rückmeldung, dass die NSStream Sockels erfolgreich geöffnet wurden, der Server (ein proprietäres System) antwortet jedoch nicht.
Ich vermute, dass meine Portierung von EncodeField nicht korrekt ist und würde mich sehr freuen, wenn Ihr Tips oder Hinweise für mich hättet...
Vielen herzlichen Dank im voraus!
C-Code:
Quellcode
- void EClientSocketBase::reqCurrentTime()
- {
- // not connected?
- if( !m_connected) {
- m_pEWrapper->error( NO_VALID_ID, NOT_CONNECTED.code(), NOT_CONNECTED.msg());
- return;
- }
- std::ostringstream msg;
- const int VERSION = 1;
- // send current time req
- ENCODE_FIELD( REQ_CURRENT_TIME);
- ENCODE_FIELD( VERSION);
- bufferedSend( msg.str());
- }
Quellcode
- ///////////////////////////////////////////////////////////
- // encoders
- template
- void EClientSocketBase::EncodeField(std::ostream& os, T value)
- {
- os << value << '\0';
- }
- template<>
- void EClientSocketBase::EncodeField(std::ostream& os, bool boolValue)
- {
- EncodeField(os, boolValue ? 1 : 0);
- }
- template<>
- void EClientSocketBase::EncodeField(std::ostream& os, double doubleValue)
- {
- char str[128];
- snprintf(str, sizeof(str), "%.10g", doubleValue);
- EncodeField(os, str);
- }
Konstanten-Definition:
Das ist meine aktuelle Portierung:
Quellcode
- @property (nonatomic, strong) NSInputStream *inputStream;
- @property (nonatomic, strong) NSOutputStream *outputStream;
- @synthesize inputStream=_inputStream;
- @synthesize outputStream=_outputStream;
- CFReadStreamRef readStream;
- CFWriteStreamRef writeStream;
- CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)@"localhost", 7496, &readStream, &writeStream); // "127.0.0.1" 7496 / 4001
- _inputStream = (__bridge NSInputStream *)readStream;
- _outputStream = (__bridge NSOutputStream *)writeStream;
- [_inputStream setDelegate:self];
- [_outputStream setDelegate:self];
- [_inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
- [_outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
- [_inputStream open];
- [_outputStream open];
- // Test Request:
- char str3[128]="49\0";
- NSString *nsstr3 = [[NSString alloc] initWithUTF8String:str3];
- NSData *data3 = [[NSData alloc] initWithData:[nsstr3 dataUsingEncoding:NSASCIIStringEncoding]];
- [_outputStream write:[data3 bytes] maxLength:[data3 length]];
- char str4[128]="1\0";
- NSString *nsstr4 = [[NSString alloc] initWithUTF8String:str4];
- NSData *data4 = [[NSData alloc] initWithData:[nsstr4 dataUsingEncoding:NSASCIIStringEncoding]];
- [_outputStream write:[data4 bytes] maxLength:[data4 length]];