gpt4 book ai didi

ios - GCDAsyncSocket 服务器仅在第一次接收数据

转载 作者:可可西里 更新时间:2023-11-01 03:54:06 28 4
gpt4 key购买 nike

当我按下发送按钮时,客户端每次都发送消息,但服务器只在第一次接收消息。服务器有什么问题

服务器:

- (void)viewDidLoad
{
[super viewDidLoad];

asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];

NSError *err = nil;
if (![asyncSocket acceptOnPort:10000 error:&err]){

NSLog(@"Error in acceptOnPort:error: -> %@", err);

}
}

- (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket
{
NSLog(@"Accepted new socket from %@:%hu", [newSocket connectedHost], [newSocket connectedPort]);

self.asyncSocket = newSocket;
NSString *welcomMessage = @"Hello from the server\r\n";
[self.asyncSocket writeData:[welcomMessage dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:1];

[self.asyncSocket readDataWithTimeout:-1 tag:0];

}

-(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"MSG: %@",msg);

}

客户:

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
[socket setDelegate:self];

}

-(IBAction)connectToServer {
NSError *err = nil;
if (![socket connectToHost:self.txtIp.text onPort:10000 error:&err]) // Asynchronous!
{
// If there was an error, it's likely something like "already connected" or "no delegate set"
NSLog(@"I goofed: %@", err);
return;
}
}

- (void)socket:(GCDAsyncSocket *)sender didConnectToHost:(NSString *)host port:(UInt16)port
{
NSLog(@"Cool, I'm connected! That was easy.");

[socket readDataWithTimeout:-1 tag:0];
}

- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag
{
if (tag == 1)
NSLog(@"First request sent");
else if (tag == 2)
NSLog(@"Second request sent");
}

- (void)socket:(GCDAsyncSocket *)sender didReadData:(NSData *)data withTag:(long)tag
{
NSLog(@"Received Data: %@",data);
}


-(void)sendMessage {

NSData *msg = [self.txtMsg.text dataUsingEncoding:NSUTF8StringEncoding];

NSLog(@"Data Send: %@",msg);

[socket writeData:msg withTimeout:-1 tag:1];

}

最佳答案

您必须在 didReadData: 委托(delegate)中从您的服务器类进行读取调用。休息很好。使用以下代码。

-(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {

[sock readDataWithTimeout:-1 tag:0];

NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"MSG: %@",msg);
}

关于ios - GCDAsyncSocket 服务器仅在第一次接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25786005/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com