Я пытаюсь создать простое приложение для чата для iOS.Он работает для получения сообщений, но не для отправки сообщений.Я использую Ruby и TCPServer в качестве сервера чата (по состоянию на: twgr), он выглядит так:
require 'socket'
server = TCPServer.new("localhost", 80)
chatters = []
def welcome(chatter)
chatter.puts "Welcome Chatter!"
end
def broadcast(message, chatters)
chatters.each do |chatter|
chatter.puts message
end
end
while (chatter = server.accept)
Thread.new(chatter) do |c|
welcome(chatter)
chatters << chatter
begin
loop do
line = c.readline
broadcast("#{line}", chatters)
end
rescue EOFError
c.close
chatters.delete(c)
broadcast("Chatter has left", chatters)
end
end
end
Сервер работает нормально, так как я могу отправлять сообщения между двумя локальными соединениями telnet.Я думаю, что проблема в моем клиенте iOS.Код, который я использую для отправки / получения сообщений, выглядит следующим образом (по состоянию на: http://www.raywenderlich.com/3932/how-to-create-a-socket-based-iphone-app-and-server):
- (void)messageReceived:(NSString *)message
{
[messages insertObject:message atIndex:0];
NSIndexPath * indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationTop];
[self.tableView endUpdates];
}
/*
Method for creating messages.
New messages are added above older messages.
It gets called when the user hits the "Send" button.
*/
- (IBAction)sendMessage:(id)sender {
NSString *response = [NSString stringWithFormat:messageField.text];
NSData *data = [[NSData alloc] initWithData:[response
dataUsingEncoding:NSASCIIStringEncoding]];
[outputStream write:[data bytes] maxLength:[data length]];
messageField.text = @"";
}
- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {
switch (streamEvent) {
case NSStreamEventHasBytesAvailable:
if (theStream == inputStream) {
// This NSLog message dosn't get called when I want to send messages from
// my iOS client.
NSLog(@"Hello");
uint8_t buffer[1024];
int len;
while ([inputStream hasBytesAvailable]) {
len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0) {
NSString *output = [[NSString alloc] initWithBytes:buffer
length:len
encoding:NSASCIIStringEncoding];
if (nil != output) {
NSLog(@"server said: %@", output);
[self messageReceived:output];
}
}
}
}
break;
case NSStreamEventEndEncountered:
[theStream close];
[theStream removeFromRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
break;
}
}
Я могу получать сообщения на клиенте iOS при отправке сообщений, но ничего не происходит, когда я пытаюсь отправить сообщения.На данный момент клиент выглядит так: