4

Objective-C 中是否有类似于 Java 中的 Netty 的机制,用于将 TCP 转移到传输层中的 UDT 协议。

现在我想实现 HTTP 请求和响应(默认通过 TCP 运行)以在我的应用程序中通过 UDT 运行。

  1. 这可能吗?

  2. iOS中是否有任何内置机制?

4

2 回答 2

0

如果你想使用 HTTP,我建议使用 NSURLConnection 类。例如,要使用带有标头的 POST 请求,请执行以下操作:

int kTimeoutInterval = 30;

NSString *post = @"Something to post";
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];


NSString *link = @"http://some_link";
link = [link stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:link] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:kTimeoutInterval];

[request setURL:[NSURL URLWithString:link]];

[request setHTTPMethod:@"POST"];
// set some header entries, for example:
//[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
//[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[postLength length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];

NSError *error;
NSURLResponse* response=nil;
NSData* data=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

现在请注意,这是一个同步请求,它会在 kTimeoutInterval 常量中定义的执行时间或超时时间内阻塞运行它的线程。这可以通过以下方式更改为异步模式:

[NSURLConnection connectionWithRequest...

在这种情况下,响应将通过委托方法来。因此,要确定哪种方法最适合您,请阅读 NSURLConnection 文档。希望这可以帮助...

于 2015-01-02T09:16:50.263 回答
0

没有什么比 Netty 更方便的了。但是,您可能想查看 CFNetwork 编程指南,特别是与 HTTP 服务器通信的部分。这描述了可用于创建和序列化 HTTP 请求和解码响应的 CFHTTPMessage 方法。当它们序列化到缓冲区并从缓冲区解码时,您可以随意传输消息。如果您已经有一个 UDT 实现,那么它应该相当简单。

请注意,您负责对 HTTP 正文进行适当的编码/解码,但如果您的 Web 服务协议相当简单,则可能只是序列化/反序列化字符串的情况。

于 2015-01-02T11:42:02.297 回答