ios中socket简单编程总结

首先和服务器建立连接:

- (void) doConnect {

CFSocketContext CTX = {0selfNULLNULLNULL};

_socket = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_STREAM, IPPROTO_TCP,kCFSocketConnectCallBack, TCPServerConnectCallBack, &CTX);

if (NULL == _socket) {

UIAlertView *alert = [[UIAlertView allocinitWithTitle:@"" message:@"创建套接字失败" delegate:nilcancelButtonTitle:@"关闭" otherButtonTitles:nil];

[alert show];

[alert release];

}

struct sockaddr_in addr4;

memset(&addr4, 0sizeof(addr4));

addr4.sin_len = sizeof(addr4);

addr4.sin_family = AF_INET;

addr4.sin_port = htons(8888);//端口

addr4.sin_addr.s_addr = inet_addr([@"192.168.1.121" UTF8String]);//IP地址

CFDataRef address = CFDataCreate(kCFAllocatorDefault, (UInt8 *)&addr4, sizeof(addr4));

 

CFSocketConnectToAddress(_socket, address, -1);

 

CFRunLoopRef cfrl = CFRunLoopGetCurrent();

CFRunLoopSourceRef source = CFSocketCreateRunLoopSource(kCFAllocatorDefault, _socket, 0);

CFRunLoopAddSource(cfrl, source, kCFRunLoopCommonModes);

CFRelease(source);

}


向服务器发送消息:   《这里需要注意的是函数体中第一句话,拼了一个”\n“,来表示当前消息的结束,当然也可以用别的符号来规定比如”\r\n“或者”/0“等,亦或者不规定》

 

- (void) sendMessage {

NSString *stringToSend = [chatController.textField.text stringByAppendingString:@"\n"];

const char *data = [stringToSend UTF8String];

send(CFSocketGetNative(_socket), data, strlen(data), 0);

}



连接成功以及发送成功接受的回调函数:

 

static void TCPServerConnectCallBack(CFSocketRef socket, CFSocketCallBackType type, CFDataRefaddress, const void *data, void *info) {

if (data != NULL) {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"连接失败" delegate:nilcancelButtonTitle:@"关闭" otherButtonTitles:nil];

[alert show];

[alert release];

return;

}

TCPClientDemoAppDelegate *delegate = (TCPClientDemoAppDelegate *)info;

[delegate performSelectorInBackground:@selector(readStream) withObject:nil];

}


以上是简单的实用ios中的类库来建立简单的socket并实现消息的发送于接收。

如需实用更多功能,可以实用第三方AsyncSocket这个类库,详情谷歌:AsyncSocket。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值