转载自socket;ios客户端与php服务端交互(补充html5+python服务端+ios客户端)
首先是服务端的搭建,Mac内置apache+php, 找下教程开启就可以了,非常方便
php Server:
<?php
set_time_limit(600);//设置10分钟的超时时间,避免资源浪费
$ip = '127.0.0.1';//配置服务端IP地址
$port = 9196;//服务端端口
if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {//建立一个套接字
echo "socket_create() failed:".socket_strerror($sock)."\n";}
if(($ret = socket_bind($sock,$ip,$port)) < 0) {//为套接字设置IP和端口
echo "socket_bind() failed:".socket_strerror($ret)."\n";}
if(($ret = socket_listen($sock,4)) < 0) {//监听端口
echo "socket_listen() failed:".socket_strerror($ret)."\n";}
$count = 0;
do {
if (($msgsock = socket_accept($sock)) < 0) {//等待并接受客户端连接
echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
break;}
else{//发送信息到客户端
$msg ="Shura so good!\n";
socket_write($msgsock, $msg, strlen($msg));
echo "测试成功\n";
$buf = socket_read($msgsock,9999);
$talkback = "收到的信息:$buf\n";
echo $talkback;
if(++$count >= 5){break;};}//重试5次后,自动关闭套接字
socket_close($msgsock);
} while (true);
socket_close($sock);//关闭套接字
?>
然后就是客户端的实现
本地做测试的话,我拿到本地的IP地址比如192.168.1.xxx , 连接在相同的网络下就可以进行通讯咯
iOS客户端代码, 使用第三方的cocoaAsyncSocket库(这里只是简单的通讯,连接成功打印一条信息,然后写一条到Server端)
#import "AsyncSocket.h"
@interface ViewController () <AsyncSocketDelegate>
{
AsyncSocket *_asyncSocket;
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
_asyncSocket = [[AsyncSocket alloc] initWithDelegate:self];
NSError *err = nil;
if (![_asyncSocket connectToHost:@"192.168.1.127" onPort:9196 error:&err]) {
NSLog(@"Error:%@", err);
}
}
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
{
NSLog(@"onSocket:%p didConnectToHost:%@ port:%hu", sock, host, port);
[sock readDataWithTimeout:1 tag:0];
}
- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
NSString* aStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"===%@",aStr);
NSData* aData= [@"<xml>我喜欢你<xml>" dataUsingEncoding: NSUTF8StringEncoding];
[sock writeData:aData withTimeout:-1 tag:1];
[sock readDataWithTimeout:1 tag:0];
}
- (void)onSocket:(AsyncSocket *)sock didSecure:(BOOL)flag
{
NSLog(@"onSocket:%p didSecure:YES", sock);
}
- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err
{
NSLog(@"onSocket:%p willDisconnectWithError:%@", sock, err);
}
- (void)onSocketDidDisconnect:(AsyncSocket *)sock
{
//断开连接了
NSLog(@"onSocketDidDisconnect:%p", sock);
}