我已经在这个问题上停留了几天,似乎越来越接近解决方案(在伟大的用户@SO的帮助下)。我正在使用 CocoaAsyncSocket 库来创建到 Windows 服务器的 TCP 套接字连接。
正在我的 appDelegate 中建立连接:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
socket = [[AsyncSocket alloc] initWithDelegate:self];
NSError *error = nil;
if (![socket connectToHost:@"199.5.83.63" onPort:11005 error:&error])
{
NSLog(@"Error connecting: %@", error);
}
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.viewController = [[[tekMatrixViewController alloc] initWithNibName:@"tekMatrixViewController" bundle:nil] autorelease];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
我有一个名为 onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port 的连接方法(库的一部分):
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
{
NSLog(@"connected :D");
}
正在调用此方法,因为我可以看到 NSLOG 的输出并且我已成功连接。我还可以从 Windows 机器上看到连接成功(使用日志文件)。
我还测试了另一个委托方法也被调用:
- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err
{
NSLog(@"error - disconnecting");
// start reconnecting procedure here...
}
我已经通过在模拟器中运行我的应用程序然后从我的笔记本电脑上拔下我的以太网线来测试 willDisconnectWithError 方法是否有效。完成此操作后,我在输出中看到了“错误 - 断开连接”字符串。
然而,最大的问题是我的委托方法(同样,来自库)没有被调用。
未调用委托方法:
- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
NSData *strData = [data subdataWithRange:NSMakeRange(0, [data length])];
NSString *msg = [[NSString alloc] initWithData:strData encoding:NSUTF8StringEncoding];
if(msg)
{
NSLog(@"RX:%@",msg);
}
else
{
NSLog(@"Fail");
}
}
我对我对委托方法如何工作的知识和理解充满信心,但我仍然不太了解它们是如何被调用的。为了进一步复杂化和引起混淆,一个委托方法(onSocket:didConnectToHost 端口:)正在被调用,但另一个(onSocket:didReadData 标签:)没有被调用。不幸的是,这只是我的问题的第一步,但我必须先解决这个问题,然后才能解决另一个问题。
任何帮助将不胜感激。感谢:D