首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCDAsyncSocket发送消息

GCDAsyncSocket发送消息
EN

Stack Overflow用户
提问于 2011-12-15 21:50:48
回答 1查看 2.5K关注 0票数 0

我在使用GCDAsyncSocket通过套接字发送消息时遇到问题。我建立了一个连接并尝试向服务器发送一条消息,但在应用程序退出时仍在发送消息。在此之前,我需要一种方法。我尝试了asyncSocket断开连接;但它什么也改变不了...请帮帮忙。下面是我的代码的一部分:

代码语言:javascript
复制
NSError *err = nil;
asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
if(![asyncSocket connectToHost:@"localhost" onPort:7777 error:&err]){
// If there was an error, it's likely something like "already connected" or "no delegate set"
    NSLog(@"I goofed: %@", err);
}
NSString *requestStr = @"<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><root><service>1</service><type>1</type><userProperties><username>someusername</username></userProperties></root>";
NSData *requestData = [requestStr dataUsingEncoding:NSUTF8StringEncoding];

[asyncSocket writeData:requestData withTimeout:1.0 tag:0];

NSData *receivedData;
[asyncSocket readDataToData:receivedData withTimeout:2.0 tag:0];
NSString *httpResponse = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
NSLog(@"%@",httpResponse);
EN

回答 1

Stack Overflow用户

发布于 2011-12-16 09:08:15

你的问题出在"readDataToData: receivedData“中--你要求GCDAsyncSocket读取数据,直到它发现”什么都没有“--receivedData是未知的。一个人通常使用这样的东西

代码语言:javascript
复制
[asyncSocket readDataToData:[GCDAsyncSocket CRLFData] withTimeout:-1 tag:0];

它将一直读取,直到获得CR/LF组合以终止读取。您还可以读取报头并确定要读取的数据的长度。

您需要告诉它何时从读取返回(这就是为什么您什么也得不到的原因)。此外,它可能只在应用程序退出时返回给您,因为当应用程序终止时套接字将关闭。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8521119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档