私のサーバーにNSStringを送信する小さなアプリケーションを作成しました。私はそこで実行されているアプリケーションを持っています。これは適切なポートを待ち受けており、ゴミ箱のように動作します。そこから来るすべてのデータが保存されます。ここで CFWriteStreamを使用してファイルをソケットに転送する
static void WriteStreamClientCallBack(CFWriteStreamRef stream, CFStreamEventType type, void *clientCallBackInfo) {
NSLog(@"%lu", type);
switch (type)
{
case kCFStreamEventEndEncountered:
{
NSLog(@"Closing");
CFWriteStreamClose(stream);
break;
}
case kCFStreamEventErrorOccurred:
{
NSLog(@"Crap, error!");
break;
}
case kCFStreamEventCanAcceptBytes:
{
NSLog(@"Stream can accept more bytes");
NSString *reqStr = [NSString stringWithFormat: @"ConReq"];
const UInt8 *rawstring = (const UInt8 *)[reqStr UTF8String];
CFWriteStreamWrite(stream, rawstring, strlen((char *)rawstring));
}
case kCFStreamEventNone:
{
NSLog(@"Nothing is happening");
break;
}
case kCFStreamEventOpenCompleted:
{
NSLog(@"Opened stream!");
break;
}
}
}
は問題が来る:私はボタンを押したときに、それはそこにループされたまま
-(IBAction)pressButton:(id)sender {
NSString *iHostname = [NSString stringWithFormat:@"xxx.xxx.xxx.xxx"];
NSString *iPort = [NSString stringWithFormat:@"9100"];
CFWriteStreamRef writeStream;
static const CFOptionFlags kWriteNetworkEvents = kCFStreamEventEndEncountered |
kCFStreamEventErrorOccurred |
kCFStreamEventCanAcceptBytes |
kCFStreamEventOpenCompleted |
kCFStreamEventNone;
CFStreamClientContext ctxt = {0,(void*)NULL,NULL,NULL,NULL};
CFHostRef hostRef = CFHostCreateWithName(kCFAllocatorDefault,(CFStringRef)iHostname);
CFStreamCreatePairWithSocketToCFHost(kCFAllocatorDefault, hostRef, [iPort intValue],
NULL, &writeStream);
CFWriteStreamSetClient(writeStream, kWriteNetworkEvents, WriteStreamClientCallBack, &ctxt);
CFWriteStreamScheduleWithRunLoop(writeStream, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
だから、私は実行ループメソッドを呼び出します。
は、私が作成したiPhoneアプリケーションでは、これは使用しています。ロギングでは、kCFStreamEventCanAcceptBytes
という名前のケースが呼び出されています。実際に、プログラムを強制終了すると、サーバにはConReq
という多数のファイルが入っています。それについて何をすべきか、何が間違っているのですか?
PS。コードはhereです。
私には論理的に見えます。任意のアイデアはどのようにこの問題を解決するには?私はネットワークコーディングで最悪です... – Joetjah
Appleのサンプルコードを見てください。 'ASIHTTPRequest'プロジェクトには、例として使用できるストリームを扱う多くのコードも含まれています。 –