您的位置:首页 > 移动开发 > IOS开发

使用ios自带的socket

2015-05-07 16:49 232 查看
iOS自带一个小的cfsocket库,可以解决简单的socket连接需求
-(void)Connect
{

//////////////////////创建套接字//////////////

CFSocketContext CTX = {0,NULL,NULL,NULL,NULL};

_socket =
CFSocketCreate(

kCFAllocatorDefault,

PF_INET,

SOCK_STREAM,

IPPROTO_TCP,

kCFSocketConnectCallBack,
// 类型,表示连接时调用

ServerConnectCallBack,//
调用的函数

NULL);

NSString *serverAddr =
@"192.168.1.33";

struct sockaddr_in addr;

memset(&addr , 0,sizeof(addr));
addr.sin_len =
sizeof(addr);
addr.sin_family =
AF_INET;
addr.sin_port =
htons(1978);
addr.sin_addr.s_addr =
inet_addr([serverAddr
UTF8String]);

CFDataRef address =
CFDataCreate(

kCFAllocatorDefault,
(UInt8*)&addr,

sizeof(addr));

CFSocketConnectToAddress(_socket,address,-1);

CFRunLoopRef cfrl =
CFRunLoopGetCurrent(); //
获取当前运行循环

CFRunLoopSourceRef source =
CFSocketCreateRunLoopSource(kCFAllocatorDefault,_socket,0);//定义循环对象

CFRunLoopAddSource(cfrl,source,kCFRunLoopCommonModes);
//将循环对象加入当前循环中

CFRelease(source);
}

static
void ServerConnectCallBack(

CFSocketRef socket,

CFSocketCallBackType type,

CFDataRef address,

const void *data,

void * info)
{

if(data != NULL)
{

NSLog(@"连接失败");//服务器那边已经提过,连接事件时该指针用于存放报错
}

else
{

NSLog(@"connect success");
}
}
-(void)ReadStream
{

char buffer[255];

while(recv(CFSocketGetNative(_socket),buffer,sizeof(buffer),0))
{

printf(buffer);
}

}- (void)viewDidLoad
{

[super
viewDidLoad];
[self
Connect];

// Do any additional setup after loading the view, typically from a nib.
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: