转自:http://hi.baidu.com/nodream7/item/87132713c469c9443a176edc
CFSocketRef _socket;
-(void)Connect
{
//创建套接字//
CFSocketContext CTX = {0,NULL,NULL,NULL,NULL};
_socket = CFSocketCreate(
kCFAllocatorDefault,
PF_INET,
SOCK_STREAM,
IPPROTO_TCP,
kCFSocketConnectCallBack, // 类型,表示连接时调用
ServerConnectCallBack, // 调用的函数
)
设置地址///
NSString *serverAddr = @"192.168.0.110";
struct sockaddr_in addr
memset(&addr , 0,sizeof(addr));
addr.sin_len = sizeof(addr);
addr.sin_family = AF_INET;
addr.sin_port = htons(12345);
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)
{
printf("connect").//服务器那边已经提过,连接事件时该指针用于存放报错
}
else
{
printf("connect success");
}
}
///监听来自服务器的信息///
-(void)ReadStream
{
char buffer[255];
while(recv( CFSocektGetNative(_socket),buffer,sizeof(buffer),0))
{
printf(buffer);
}
}
/发送信息给服务器
- (void) sendMessage
{
NSString *stringToSend = @"Overlord,this is Hunter21";
const char *data = [stringToSend UTF8String];
send(CFSocketGetNative(_socket), data, strlen(data) + 1, 0);
}