ios文件连接服务器无法写入,iOS写入服务器使用CFWriteStrem不写?

我基本上是发一个帖子到我的服务器。我正在编写的字符串是@“POST/api?f = ### HTTP/1.1 \ r \ n主机:http://server.loc.a.tion \ r \ n内容类型:application/x-www-form-urlencoded \ r \ n内容长度: ## \ r \ n \ r \ n数据= somedataandstuff”。在此之后,服务器应该发送给我一条消息。 (不是我已经得到了那么多。)iOS写入服务器使用CFWriteStrem不写?

我正在按照基本轮询代码列出apple,但我做了一些更改。

请注意,以下是我已经打开后的流),data_to_send.buffer是(字符*),并data_to_send.buffer_size是1500

//Preform Write operations

bool done = false;

int bufLen = data_to_send.buffer_size;

const uint8_t * rawstring =(const uint8_t *)data_to_send.buffer;

CFIndex bytesWritten;

while (!done) {

CFStreamStatus stat = CFWriteStreamGetStatus(writeStream); //for me while debugging

if (CFWriteStreamCanAcceptBytes(writeStream)) {

//ADDED:

if(bufLen > 0) bytesWritten = CFWriteStreamWrite(writeStream, rawstring, (CFIndex)bufLen);

//ADDED: to check if it ever writes

if(CFWriteStreamGetStatus(writeStream) == kCFStreamStatusWriting){

NSLog(@"lalallaa");

}

if (bytesWritten < 0) {

//error stuff

} else if (bytesWritten == 0) {

if (CFWriteStreamGetStatus(writeStream) == kCFStreamStatusAtEnd) {

done = TRUE;

rawstring = nil;

}

} else if (bytesWritten != bufLen) {

// Determine how much has been written and adjust the buffer

bufLen = bufLen - bytesWritten;

memmove(rawstring, rawstring + bytesWritten, bufLen);

//error stuff

} else { //ADDED

bufLen = 0;

bytesWritten = 0;

//loop and wait until finished

}

}

}

CFWriteStreamClose(writeStream);

CFRelease(writeStream);

writeStream = NULL;

我修改了代码,因为CFWriteStreamWrite返回完整1500(这是我脑海中的一个标志:如果bufLen是1500,它写的都不应该返回0),这在苹果代码中没有说明(即:bytesWritten == bufLen)(另一个标志为I假设苹果不会错过任何东西,除非这是预期的功能)。反过来,bufLen或缓冲区(rawstring)不会被修改,我们只是重复返回1500,并开始一个永不结束的循环。因此,为了解决这个问题,我添加了其他的设置bufLen为0和写入0的字节,以便代码将循环检查它何时到达KCFStreamStatusAtEnd。现在,当我逐步了解这一点时,我注意到一旦它执行了CFWriteStreamWrite,状态就会变为2(CFStreamStatusOpen),因此也是另一个永不结束的循环。我添加的查看它是否写入的命令永远不会被打到,因为据我所知它不会。

但是,现在如果我们检查apache的访问日志服务器上,我们有:

...“ - ” 408 -

中,工作电话(从工作java代码制造)看起来像

.. 。“POST/api?f = blahblah”200 ##

所以我觉得至少有一些东西至少要写出来。虽然408状态是请求超时。这可能是因为在打开流的情况下进行调试时,流位于那里?或者因为当我调试并停止时,我从不关闭流?

任何想法或建议将不胜感激。 (我是iOS/objective-c的新手)

2012-08-15

sherwood

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值