在一个ios应用中我使用socket第三方库 AsyncSocket来实现手机客户端和PC服务器端的通信。服务器可以收到客户端发来信息,也有返回信息,但是客户端却没有收到这个返回的信息,这个为什么呢?下面是一部分代码
@implementation ViewController
@synthesize socket;
@synthesize host;
@synthesize message;
@synthesize port;
@synthesize status;
@synthesize button;
(void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
-(void)addText:(NSString *)str
{
status.text = [status.text stringByAppendingFormat:@"%@\n",str];
}
(void)viewDidLoad
{
[super viewDidLoad];
host.text = @"61.191.200.214";
port.text = @"9631";
[button setTitle:@"连接" forState:UIControlStateNormal];
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
-(void)socket:(GCDAsyncSocket )sock didConnectToHost:(NSString )host port:(uint16_t)port
{
[self addText:[NSString stringWithFormat:@"连接到:%@",host]];
[socket readDataWithTimeout:-1 tag:0];
}
}
(IBAction)send:(id)sender { //开始按钮
//连接服务器端
socket = [[GCDAsyncSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *err = nil;
if(![socket connectToHost:host.text onPort:[port.text intValue] error:&err])
{
[self addText:err.description];
}else
{
[self addText:[NSString stringWithFormat: @"打开%@端口",socket.localHost]];
}
//发送数据
if (message.text.length!=0){
NSString* str_send=[[NSString alloc] initWithString:[NSString stringWithFormat:@"send%@",message.text]];
[socket writeData:[str_send dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:-1];
[self addText:[NSString stringWithFormat:@"发送:%@",message.text]];
}else{
NSString* str_send= @"receive";
[socket writeData:[str_send dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:-1];
[message resignFirstResponder];
[socket 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]];
[socket readDataWithTimeout:-1 tag:0];
}
@end
没有设置delegate,self.socket.delegate=self;
总结过这个内容,挺详细的,自己看吧:http://my.oschina.net/u/2448717/blog/499784
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。