Tin nhắn được gửi của khách hàng mỗi khi tôi nhấn nút gửi nhưng Máy chủ chỉ nhận được tin nhắn lần đầu tiên. vấn đề này là gì trong máy chủMáy chủ GCDAsyncSocket chỉ nhận dữ liệu lần đầu tiên
Server:
- (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);
}
Chủ đầu tư:
- (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];
}
Bạn có nhận được _message_ tại máy chủ lần đầu hay chỉ là cuộc gọi do kết nối của ổ cắm mới? Tôi tin rằng bạn đang nhận được cuộc gọi kết nối và sau đó khách hàng sẽ nhận được thông báo chào mừng. Sau đó sẽ không có bất kỳ tiếp nhận ở phía máy chủ. Xác nhận điều này và tôi có thể thử đề xuất điều gì đó. – Gandalf
@Gandalf: cảm ơn, khách hàng nhận được thông báo chào mừng và khi khách hàng gửi tin nhắn, tin nhắn đầu tiên chỉ có thể nhận được máy chủ. Tin nhắn khác của khách hàng đã gửi thành công nhưng máy chủ không thể nhận được. – Salim
Sử dụng mã của bạn nhưng không thể kết nối với máy chủ. Không, ngay cả ở lần đầu tiên. Bạn có sử dụng @ "localhost" làm tham số không? –