Socket 编程之_TCP ☎☎☎

 

 

   话不多说,直接上demo 。本次demo 用的是基于AsyncSocket第三方开源框架的demo。最终效果图如下,输入ip地址,即可发送信息。

                                   

 

1_ 首先导入网络链接的CFNetwork.framework 框架

2_ .h 文件

  
  
  
  
  1. #import <UIKit/UIKit.h> 
  2. //导入AsyncSocket.h 头文件
  1. #import "AsyncSocket.h" 
  2. @interface ViewController : UIViewController<AsyncSocketDelegate> 
  3.  
  4.     //服务端 
  5.     AsyncSocket *recvSocket; 
  6.     // 客户端 
  7.     AsyncSocket *sendSocket; 
  8.     // 接收数据
  9.     NSMutableArray *recvArr; 
  10.  
  11. @property (retain, nonatomic) IBOutlet UITextField *ipField; 
  12. @property (retain, nonatomic) IBOutlet UITextField *sendField; 
  13. @property (retain, nonatomic) IBOutlet UITextView *contentView; 
  14. - (IBAction)sendText:(id)sender; 
  15. @end 

3_ .m文件 

 

  
  
  
  
  1. #import "ViewController.h" 
  2. @implementation ViewController 
  3. @synthesize ipField; 
  4. @synthesize sendField; 
  5. @synthesize contentView; 
  6.  
  7. - (void)didReceiveMemoryWarning 
  8.     [super didReceiveMemoryWarning]; 
  9.     // Release any cached data, images, etc that aren't in use. 
  10.  
  11. #pragma mark - View lifecycle 
  12.  
  13. - (void)viewDidLoad 
  14.     [super viewDidLoad]; 
  15.      
  16.     // 记得初始化数组 
  17.     recvArr = [[NSMutableArray alloc]initWithCapacity:0]; 
  18.      
  19.      
  20.     // 服务端   
  21.     recvSocket = [[AsyncSocket alloc]initWithDelegate:self]; 
  22.      
  23.     // 客户端 
  24.     sendSocket = [[AsyncSocket alloc]initWithDelegate:self]; 
  25.     // 服务端开始等待别的客户端的链接 
  26.     //  端口为 > 5000  较合适 : 65535   
  27.     [recvSocket acceptOnPort:5678 error:nil]; 
  28.     // 那么什么时候 接收到了 链接  
  29.      
  30.      
  31.  
  32. #pragma mark - socket 服务端 
  33. // 调用这个方法证明接受到了一个链接 
  34. - (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket 
  35.     //newSocket 就为新的链接 
  36.     // 客户端和服务器链接 : 将请求保存 (表示同意链接,相当于对newSocket 做了个retain操作) 
  37.      
  38.     [recvArr addObject:newSocket]; 
  39.      
  40.     // 等待客户端发送数据 
  41.     [newSocket readDataWithTimeout:-1 tag:100]; 
  42.      
  43.     //什么时候读取到了数据 
  44.      
  45.  
  46. // 调用这个方法就证明接受到了客户端发送的数据 
  47. - (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag 
  48.     NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; 
  49.     contentView.text = [NSString stringWithFormat:@"%@\n对方说:%@",contentView.text,str]; 
  50.     //继续监听 :(继续等待服务端发送数据) 
  51.     [sock readDataWithTimeout:-1 tag:100]; 
  52.  
  53.  
  54. #pragma mark - Client 客户端 
  55.  
  56.  
  57. //调用这个方法的时候,就证明链接成功(只调用一次) 
  58. - (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{ 
  59.      
  60.  
  61.  
  62. - (IBAction)sendText:(id)sender { 
  63.     // 如果没链接,那么去链接服务端 
  64.     if (sendSocket.isConnected == NO) { 
  65.         [sendSocket connectToHost:ipField.text onPort:5678 withTimeout:60 error:nil]; 
  66.         //什么时候链接成功  
  67.     } 
  68.      
  69.     // NSString -> NSData  
  70.     NSData *data = [sendField.text dataUsingEncoding:NSUTF8StringEncoding]; 
  71.     // 发送数据 
  72.     [sendSocket writeData:data withTimeout:60 tag:100]; 
  73.     // 什么时候知道数据发送出去(发送成功) 
  74.      
  75.      
  76. }  
  77.  
  78. // 调用这个方法表示数据发送成功 
  79. - (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag 
  80.      
  81.  
  82.  
  83. - (void)viewDidUnload 
  84.     [self setIpField:nil]; 
  85.     [self setSendField:nil]; 
  86.     [self setContentView:nil]; 
  87.     [super viewDidUnload]; 
  88.     // Release any retained subviews of the main view
  89.     // e.g. self.myOutlet = nil; 
  90.  
  91.  
  92. - (void)dealloc { 
  93.     [ipField release]; 
  94.     [sendField release]; 
  95.     [contentView release]; 
  96.     [super dealloc]; 
  97.  
  98. @end 

 

本文出自 “JereJobs” 博客,转载请与作者联系!

你可能感兴趣的:(socket编程)