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

时间:2014-12-31 08:15:53

标签: ios objective-c tcp netty udp-data-transfer

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

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

  1. 这可能吗?

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

2 个答案:

答案 0 :(得分: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文档。希望这会有所帮助...

答案 1 :(得分:0)

没有像Netty那样方便的东西。但是,您可能需要查看CFNetwork编程指南,特别是Communicating with HTTP Servers部分。这描述了CFHTTPMessage方法,可用于创建和序列化HTTP请求以及解码响应。当它们序列化到缓冲区并从缓冲区解码时,您可以随心所欲地传输消息。如果您已经有UDT实现,那么它应该是相当简单的。

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