http://blog.sina.com.cn/s/blog_7a2f0a830101ecv4.html
clinetSocket
1、viewcontroller.h
@interface ViewController : UIViewController<</span>GCDAsyncSocketDelegate,UITextFieldDelegate>
{
GCDAsyncSocket *socket;
}
@property(strong) GCDAsyncSocket *socket
@property (strong, nonatomic) IBOutlet UITextField *host;
@property (strong, nonatomic) IBOutlet UITextField *message;
@property (strong, nonatomic) IBOutlet UITextField *port;
@property (strong, nonatomic) IBOutlet UITextView *status;
- (IBAction)connect:(id)sender;
- (IBAction)send:(id)sender;
@end
viewcontroller.m
//连接服务器
- (IBAction)connect:(id)sender {
socket = [[GCDAsyncSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
socket.delegate = self;
NSError *err = nil;
BOOL connState=[socket connectToHost:host.text onPort:[port.text intValue] error:&err];
if(!connState)
{
[self addText:err.description];
}else
{
NSLog(@"连接服务器:%@ 成功",host.text);
[self addText:@"打开端口"];
}
}
-(void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port
{
[self addText:[NSString stringWithFormat:@"连接到:%@",host]];
[socket readDataWithTimeout:-1 tag:0];
}
- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err
{
NSLog(@"socket did is connect:%@",err);
}
//发送数据
- (IBAction)send:(id)sender {
[socket writeData:[message.text dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:0];
[self addText:[NSString stringWithFormat:@"发送的数据:%@",message.text]];
[message resignFirstResponder];
[socket readDataWithTimeout:-1 tag:0];
}
//读取服务器获取的数据
-(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
NSString *newMessage = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
[self addText:[NSString stringWithFormat:@"服务器:%@:%@",sock.connectedHost,newMessage]];
[socket readDataWithTimeout:-1 tag:0];
}
#pragma mark - View lifecycle
-(void)addText:(NSString *)str
{
status.text = [status.text stringByAppendingFormat:@"%@\n",str];
}
- (void)viewDidLoad
{
[super viewDidLoad];
//设置默认的服务器地址和端口
host.text = @"192.168.2.107";
port.text = @"54321";
// Do any additional setup after loading the view, typically from a nib.
}
2、serviceSocket
1、appdelegate.h
#import "GCDAsyncSocket.h"
#import "GCDAsyncUdpSocket.h"
@interface AppDelegate : NSObject <</span>NSApplicationDelegate,GCDAsyncSocketDelegate,GCDAsyncUdpSocketDelegate>
{
GCDAsyncSocket *socket;
GCDAsyncSocket *s;
}
@property(strong) GCDAsyncSocket *socket;
- (IBAction)listen:(id)sender;
@property (unsafe_unretained) IBOutlet NSTextView *status;
@property (unsafe_unretained) IBOutlet NSTextField *port;
@property (unsafe_unretained) IBOutlet NSTextField *host;
@property (assign) IBOutlet NSWindow *window;
2、appdelegate.m
@implementation AppDelegate
@synthesize status;
@synthesize port;
@synthesize host;
@synthesize window = _window;
@synthesize socket;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
//服务器的端口号
port.stringValue = @"54321";
}
-(void)addText:(NSString *)str
{
status.string = [status.string stringByAppendingFormat:@"%@\n",str];
}
//开始监听
- (IBAction)listen:(id)sender {
NSLog(@" begin listen");
socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *err = nil;
if(![socket acceptOnPort:[port integerValue] error:&err])
{
[self addText:err.description];
}else
{
[self addText:[NSString stringWithFormat:@"开始监听%d端口.",port.integerValue]];
}
}
- (void)socket:(GCDAsyncSocket *)sender didAcceptNewSocket:(GCDAsyncSocket *)newSocket
{
// The "sender" parameter is the listenSocket we created.
// The "newSocket" is a new instance of GCDAsyncSocket.
// It represents the accepted incoming client connection.
// Do server stuff with newSocket...
[self addText:[NSString stringWithFormat:@"建立与%@的连接",newSocket.connectedHost]];
s = newSocket;
s.delegate = self;
[s readDataWithTimeout:-1 tag:0];
}
//向客户端写数据
-(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
NSString *receive = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
[self addText:[NSString stringWithFormat:@"%@:%@",sock.connectedHost,receive]];
NSString *reply = [NSString stringWithFormat:@"服务器收到:%@",receive];
[s writeData:[reply dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:0];
[s readDataWithTimeout:-1 tag:0];
}
@end