ios socket通信的问题

mmorss 2017-08-18 11:16:47
我用cocaAsySocket 或者其它工具,做socket通信,每次都是socket断开连接时,服务端才能收到ios模拟器发的消息,好像不断开连接消息就堵住了一样,是我的代码有问题吗,还是因为用的模拟器的原因,我用安卓手机做为服务器来接收消息,电脑开着xcode 和android studio
引用
- (void)viewDidLoad {
//[super viewDidLoad];
[self getIPAddress:true];
if([self connectServer:HOST_IP port:HOST_PORT]==1){

}
UIButton *btn=[self addButton:@"发送" withx:110 withy:130 withWidth:200 withTag:1];
[self.view addSubview:btn ];
UIButton *btn1=[self addButton:@"断开" withx:0 withy:60 withWidth:200 withTag:0];
[self.view addSubview:btn1 ];

UIButton *btn2=[self addButton:@"连接" withx:0 withy:95 withWidth:200 withTag:2];
[self.view addSubview:btn2 ];
// 监听读取
}


//事件方法
- (void)handleSingleTap:(UIGestureRecognizer *)gestureRecognizer
{
//事件处理。
NSString *str=[NSString stringWithFormat:@"%ld",gestureRecognizer.view.tag];
NSLog(@"点击了%@",str) ;
switch (gestureRecognizer.view.tag) {
case 0:
[client disconnect];
break;
case 1:
[self sendMsg];
break;

case 2:
[self connectServer:HOST_IP port:HOST_PORT];
break;
case 3:

break;

default:
break;
}

}

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}



- (void)viewDidUnload {
client = nil;
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}

- (int)connectServer:(NSString *)hostIP port:(int)hostPort
{
if (client == nil)
{
client = [[AsyncSocket alloc] initWithDelegate:self];
NSError *err = nil;
//192.168.110.128
if (![client connectToHost:hostIP onPort:hostPort error:&err])
{
NSLog(@"%@ %@", [err code], [err localizedDescription]);

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[@"Connection failed to host "
stringByAppendingString:hostIP]
message:[[[NSString alloc]initWithFormat:@"%@",[err code]] stringByAppendingString:[err localizedDescription]]
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
// [alert release];
//client = nil;
return SRV_CONNECT_FAIL;
}
else
{
NSLog(@"Conectou!");
return SRV_CONNECT_SUC;
}
}
else
{
[client readDataWithTimeout:-1 tag:0];
return SRV_CONNECTED;
}

}

- (void)reConnect
{
int stat = [self connectServer:HOST_IP port:HOST_PORT];
switch (stat)
{
case SRV_CONNECT_SUC:[self showMessage:@"connect success"];break;
case SRV_CONNECTED:[self showMessage:@"It's connected,don't agian"];break;
default:break;
}
}

- (void)sendMsg
{
// NSString *inputMsgStr = self.inputMsg.text;
NSString * content = @"ok";
NSLog(@"%@",content);
NSData *data = [content dataUsingEncoding:NSISOLatin1StringEncoding];
[client writeData:data withTimeout:-1 tag:0];

//[data release];
//[content release];
//[inputMsgStr release];
//继续监听读取
[client readDataWithTimeout:-1 tag:0];
}

#pragma mark -
#pragma mark close Keyboard
- (void)textFieldDoneEditing:(id)sender
{
[sender resignFirstResponder];
}

- (void)backgroundTouch:(id)sender
{
[inputMsg resignFirstResponder];
}

#pragma mark socket uitl

- (void)showMessage:(NSString *)msg
{
UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"Alert!"
message:msg
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
// [alert release];
}


#pragma mark socket delegate

- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
{
[client readDataWithTimeout:-1 tag:0];
NSLog(@"连接成功");
}

- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err
{
NSLog(@"Error");
}

- (void)onSocketDidDisconnect:(AsyncSocket *)sock
{
NSString *msg = @"Sorry this connect is failure";
[self showMessage:msg];
// [msg release];
client = nil;
NSLog(@"断开");
}

- (void)onSocketDidSecure:(AsyncSocket *)sock
{

}

- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
NSString* aStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"Hava received datas is :%@",aStr);
// self.outputMsg.text = aStr;
// [aStr release];
[client readDataWithTimeout:-1 tag:0];
}



...全文
802 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmorss 2017-12-12
  • 打赏
  • 举报
回复
ios 要加个“\r\n”
mmorss 2017-08-24
  • 打赏
  • 举报
回复
引用 3 楼 renwotao2009 的回复:
tcpdump抓下包,看调用发送方法时发送没,如果没有,就找原因,是不是缓存了,并没有及时发送

我拿到的包是这样的,点击发送就会有这个包,但是安卓的没有收到,是不是没有发送成功啊
renwotao2009 2017-08-22
  • 打赏
  • 举报
回复
tcpdump抓下包,看调用发送方法时发送没,如果没有,就找原因,是不是缓存了,并没有及时发送

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧