클라이언트는 보내기 버튼을 누를 때마다 메시지를 보내지 만 서버는 메시지를 처음 수신합니다. 서버에 문제가 무엇입니까GCDAsyncSocket 서버는 처음으로 데이터를 수신합니다.
서버 :
- (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];
}
처음으로 서버에서 _ 메시지를 수신 했습니까? 아니면 새 소켓 연결 시도의 결과로 전화 한 것입니까? 나는 당신이 연결 호출을 받고 클라이언트가 환영 메시지를 받아야한다고 믿습니다. 그 후에는 서버 측에서 수신을하지 않습니다. 이것을 확인하면 뭔가 제안 할 수 있습니다. – Gandalf
@ 간달프 : 감사합니다. 클라이언트가 환영 메시지를 받고 클라이언트가 메시지를 보낼 때 첫 번째 메시지 만 서버를받을 수 있습니다. 클라이언트의 다른 메시지가 성공을 보냈지 만 서버는 수신 할 수 없습니다. – Salim
코드를 사용하지만 서버에 연결할 수 없습니다. 처음에는. @ "localhost"를 매개 변수로 사용합니까? –