我无法从正在开发的iphone应用程序在套接字上发送数据。 总之,我想连接到特定端口上的tcp服务器,发送数据有效负载,然后关闭套接字。打开套接字,发送数据,关闭套接字=截断数据
看起来好像插座没有在关闭之前刷新缓冲区中的数据。
这里是我的代码:
int port = 1234;
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef)host, port, &readStream, &writeStream);
if (readStream && writeStream) {
//CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
inputStream = (NSInputStream *)readStream;
[inputStream retain];
[inputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
outputStream = (NSOutputStream *)writeStream;
[outputStream retain];
[outputStream setDelegate:self];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream open];
}
[outputStream write:(void *)&len maxLength:4];
[outputStream write:[data bytes] maxLength:[data length]];
if (inputStream) {
CFReadStreamClose((CFReadStreamRef)inputStream);
CFRelease(inputStream);
}
if (outputStream) {
CFWriteStreamClose((CFWriteStreamRef)outputStream);
CFRelease(outputStream);
}
所有的想法都赞赏
延
你怎么知道outputStream不发送任何东西?尝试检查'write:maxLength'的返回值。如果它是-1,则可以获得调用'[outputStream streamError]''的更多细节。 – Saphrosit 2011-05-30 22:52:13
@PavelChuchuva它大部分时间都有效。我认为,99%的发送通过我的服务器,但也许1%我连接到我的服务器,但没有收到数据。 @ThomasMinor给了我下面的一些提示,这让我最终在关闭套接字之前尝试等待NSStreamEventHasSpaceAvailable事件,但是我不确定它是否有副作用。也许它会在发送大块数据时关闭套接字?感谢您的帮助 – 2011-06-01 22:54:16