socket;ios客户端与php服务端交互(补充html5+python服务端+ios客户端)


这几天工程少了静下心来玩玩WebSocket,发现还是挺有意思的,目前只是做做测试,有待研究更深入的东西

当然ios我引入了AsyncSocket库作为我的socket库,有兴趣的朋友可以谷歌一下这个东西,挺实用的

(补充)近期还玩了下基于python,html5和ios端的WebSocket,颇有感悟,大家有兴趣可以去谷歌下RockSocket,简单易用而且方便,是个很好的HTML5和ios端相互交流的socket框架。

php sever端:

<?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);//关闭套接字
?>

 ios 客户端.h:

//
//  RootViewController.h
//  myFirstSocket
//
//  Created by Jahnny on 13-3-22.
//  Copyright (c) 2013年 ownerblood. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface RootViewController : UIViewController
{
    AsyncSocket     *_asyncSocket;
}
@property (retain, nonatomic) IBOutlet UITextField *submitText;

@end

 

  ios 客户端.m:

//
//  RootViewController.m
//  myFirstSocket
//
//  Created by Jahnny on 13-3-22.
//  Copyright (c) 2013年 ownerblood. All rights reserved.
//

#import "RootViewController.h"

@interface RootViewController ()

@end

@implementation RootViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (IBAction)pressTest:(id)sender {
    if (!_asyncSocket)
    {
        [_asyncSocket release];
        _asyncSocket=nil;
    }
    
    _asyncSocket = [[AsyncSocket alloc]initWithDelegate:self];
    NSString *host = @"127.0.0.1";
    int nPort = 9196;
    NSError *error = nil;
    //[_asyncSocket connectToHost:host onPort:nPort error:&error];
    [_asyncSocket connectToHost:host onPort:nPort withTimeout:2 error:&error];
    if (error!=nil) {
        NSLog(@"连接失败:%@",error);
    }else{
        NSLog(@"连接成功");
    }
}

- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err
{
    NSLog(@"Info___willDisconnectWithError");
    //[self logInfo:FORMAT(@"Client Disconnected: %@:%hu", [sock connectedHost], [sock connectedPort])];
    if (err) {
        NSLog(@"错误报告:%@",err);
    }else{
        NSLog(@"连接工作正常");
    }
    [_asyncSocket release];
    _asyncSocket = nil;
}

- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
{
    NSLog(@"Info___didConnectToHost");
    [sock readDataWithTimeout:-1 tag:0];
    
    if (_submitText.text.length>0) {
        [sock writeData:[_submitText.text dataUsingEncoding:NSUTF8StringEncoding] withTimeout:3 tag:1];
    }else{
        [sock writeData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.baidu.com"]] withTimeout:3 tag:1];
    }

}

- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
    NSLog(@"Info___didReadData");
    NSData *strData = [data subdataWithRange:NSMakeRange(0, [data length])];
    NSString *msg = [[[NSString alloc] initWithData:strData encoding:NSUTF8StringEncoding] autorelease];
    if(msg)
    {
        NSLog(@"%@",msg);
    }
    else
    {
        NSLog(@"错误");
    }
    [sock readDataWithTimeout:-1 tag:0];
    
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // Do any additional setup after loading the view from its nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)dealloc {
    [_submitText release];
    [super dealloc];
}
@end

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM