视图控制器.h
@interface ViewController : UIViewController{
CFSocketRef s;
int connectFlag;
}
视图控制器.m
void receiveDataCilent(CFSocketRef cs,
CFSocketCallBackType type,
CFDataRef address,
const void *data,
void *info)
{
CFDataRef df = (CFDataRef) data;
int len = CFDataGetLength(df);
if(len <= 0) return;
CFRange range = CFRangeMake(0,len);
UInt8 buffer[len];
NSLog(@"Received %d bytes from socket %d\n",
len, CFSocketGetNative(cs));
CFDataGetBytes(df, range, buffer);
NSLog(@"Client received: %s\n", buffer);
NSLog(@"As UInt8 coding: %@", df);
NSLog(@"len value: %d", len);
}
-(void) clientConnect:(int)sender;{
s = CFSocketCreate(NULL, PF_INET,
SOCK_STREAM, IPPROTO_TCP,
kCFSocketDataCallBack,
receiveDataCilent,
NULL);
struct sockaddr_in sin;
struct hostent *host;
memset(&sin, 0, sizeof(sin));
host = gethostbyname("localhost");
memcpy(&(sin.sin_addr), host->h_addr,host->h_length);
sin.sin_family = AF_INET;
sin.sin_port = htons(6666);
CFDataRef address;
CFRunLoopSourceRef source;
address = CFDataCreate(NULL, (UInt8 *)&sin, sizeof(sin));
CFSocketConnectToAddress(s, address, 0);
CFRelease(address);
source = CFSocketCreateRunLoopSource(NULL, s, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(),
source,
kCFRunLoopDefaultMode);
CFRelease(source);
CFRunLoopRun();
}
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if(connectFlag == 0 ){
[self clientConnect:1];
}
}
首先我很抱歉弄乱了xcode编程和线程编程的概念我对xcode很陌生,我需要尽快完成我的游戏项目
此代码假设连接到服务器并等待来自服务器的消息。我尝试测试它,它工作正常。在视图中,我有可以按下和更改视图的 IBAction。
但是在我将它实施到我的主要项目之后。它可以运行,但我不能按任何按钮或做任何事情。注销后。它似乎停留在 CFRunLoopRun(); 我认为它陷入了循环,但为什么当我测试它时。它没有卡住吗?
在我的项目中,这段代码是从另一个视图运行的,而不是像我刚刚测试的那样从 ViewController 运行。我不知道为什么它卡在我的项目中。
任何帮助,将不胜感激。