话不多说,直接上demo 。本次demo 用的是基于AsyncSocket第三方开源框架的demo。最终效果图如下,输入ip地址,即可发送信息。
1_ 首先导入网络链接的CFNetwork.framework 框架
2_ .h 文件
- #import <UIKit/UIKit.h>
- //导入AsyncSocket.h 头文件
- #import "AsyncSocket.h"
- @interface ViewController : UIViewController<AsyncSocketDelegate>
- {
- //服务端
- AsyncSocket *recvSocket;
- // 客户端
- AsyncSocket *sendSocket;
- // 接收数据
- NSMutableArray *recvArr;
- }
- @property (retain, nonatomic) IBOutlet UITextField *ipField;
- @property (retain, nonatomic) IBOutlet UITextField *sendField;
- @property (retain, nonatomic) IBOutlet UITextView *contentView;
- - (IBAction)sendText:(id)sender;
- @end
3_ .m文件
- #import "ViewController.h"
- @implementation ViewController
- @synthesize ipField;
- @synthesize sendField;
- @synthesize contentView;
- - (void)didReceiveMemoryWarning
- {
- [super didReceiveMemoryWarning];
- // Release any cached data, p_w_picpaths, etc that aren't in use.
- }
- #pragma mark - View lifecycle
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // 记得初始化数组
- recvArr = [[NSMutableArray alloc]initWithCapacity:0];
- // 服务端
- recvSocket = [[AsyncSocket alloc]initWithDelegate:self];
- // 客户端
- sendSocket = [[AsyncSocket alloc]initWithDelegate:self];
- // 服务端开始等待别的客户端的链接
- // 端口为 > 5000 较合适 : 65535
- [recvSocket acceptOnPort:5678 error:nil];
- // 那么什么时候 接收到了 链接
- }
- #pragma mark - socket 服务端
- // 调用这个方法证明接受到了一个链接
- - (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket
- {
- //newSocket 就为新的链接
- // 客户端和服务器链接 : 将请求保存 (表示同意链接,相当于对newSocket 做了个retain操作)
- [recvArr addObject:newSocket];
- // 等待客户端发送数据
- [newSocket readDataWithTimeout:-1 tag:100];
- //什么时候读取到了数据
- }
- // 调用这个方法就证明接受到了客户端发送的数据
- - (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
- {
- NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
- contentView.text = [NSString stringWithFormat:@"%@\n对方说:%@",contentView.text,str];
- //继续监听 :(继续等待服务端发送数据)
- [sock readDataWithTimeout:-1 tag:100];
- }
- #pragma mark - Client 客户端
- //调用这个方法的时候,就证明链接成功(只调用一次)
- - (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{
- }
- - (IBAction)sendText:(id)sender {
- // 如果没链接,那么去链接服务端
- if (sendSocket.isConnected == NO) {
- [sendSocket connectToHost:ipField.text onPort:5678 withTimeout:60 error:nil];
- //什么时候链接成功
- }
- // NSString -> NSData
- NSData *data = [sendField.text dataUsingEncoding:NSUTF8StringEncoding];
- // 发送数据
- [sendSocket writeData:data withTimeout:60 tag:100];
- // 什么时候知道数据发送出去(发送成功)
- }
- // 调用这个方法表示数据发送成功
- - (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag
- {
- }
- - (void)viewDidUnload
- {
- [self setIpField:nil];
- [self setSendField:nil];
- [self setContentView:nil];
- [super viewDidUnload];
- // Release any retained subviews of the main view.
- // e.g. self.myOutlet = nil;
- }
- - (void)dealloc {
- [ipField release];
- [sendField release];
- [contentView release];
- [super dealloc];
- }
- @end
转载于:https://blog.51cto.com/jerejobs/1128268