這幾天工程少了靜下心來玩玩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