2

サーバー側とクライアント側を扱う iPhone アプリを書いています。私が抱えている問題は、アプリ (クライアント側) から Java プログラム (サーバー側) にデータを送信できないことです。私は今ちょっと立ち往生しています。どんな助けでも大歓迎です。

私のobj-cコード(クライアント):

- (BOOL) initConnection: (NSString *) ipAddr {
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)ipAddr, 4444, NULL, &writeStream);

if(!writeStream)
    return NO;

outStream = (__bridge NSOutputStream *) writeStream;

[outStream setDelegate:self];

[outStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

[outStream open];

self.data = [[NSData alloc] init];

return YES;


- (void) sendCommand: (NSString *) command {
NSLog(@"Command that was sent to method: %@", command);

self.data = [NSData dataWithBytes:@"This is a test\n" length:16];

int bytes = [outStream write:[self.data bytes] maxLength:[self.data length]];

私のJavaコード(サーバー):

private void handleCommands() {
    try {
        do {
            System.out.println("Right before reading socket");
            msg = in.readLine();

            System.out.println("Received: " + msg);

        } while(!EOC);
    } catch(IOException e) {
        e.printStackTrace();
    }
} 

アプリからデータを送信すると、サーバー側のコードが
msg = in.readLine()を通過することはありません。アプリ側で接続を終了すると、受信した文字列がnullであることが出力されます。

4

1 に答える 1

1

実際には、このコード行で:

self.data = [NSData dataWithBytes:@"This is a test\n" length:16];

文字列の長さは 15 ですが、パラメーターとして 16 を渡しています。たぶん、最後の文字を待っていますか?

次のように、文字列の長さをハードコーディングしないでください。

NSString *msgStr = @"This is a test\n";
self.data = [NSData dataWithBytes:msgStr length:[msgStr length]];
于 2012-05-27T00:33:11.553 に答える