Итак, я возился с некоторыми файлами iOS dev и хотел попробовать отправить некоторую строку из симулятора Xcode на сервер, на котором я работал в python. У меня никогда не было двух разных языков программирования, поэтому я думал, что это будет круто.Как заставить мой клиент-клиент поговорить с моим сервером python?
Я следовал некоторым Objective-C сокеты учебников в Интернете, и это то, что я придумал
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL,
(CFStringRef)@"localhost",
5321,
&readStream,
&writeStream);
NSInputStream *inputStream = (__bridge_transfer NSInputStream *)readStream;
NSOutputStream *outputStream = (__bridge_transfer NSOutputStream *)writeStream;
[inputStream setDelegate:self];
[outputStream setDelegate:self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
[outputStream open];
NSString *response = [NSString stringWithFormat:@"hello from obj c"]; //", inputNameField.text];
NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSASCIIStringEncoding]];
[outputStream write:[data bytes] maxLength:[data length]];
Затем на стороне сервера, это простой цикл, который ожидает сообщение и, как предполагается печать Это.
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = 'localhost'
port = 5321
s.bind((host, port))
s.listen(5)
print("Now Listening")
c, addr = s.accept()
print("Connected, Waiting for message...")
while True:
data = c.recv(1024)
print(">Recieved: " + str(data))
Так я думал [InputStream открыть]/[OutputStream открыть] команду команда соответствовала бы Socket.Accept() в Python, а затем [OutputStream запись:] функция будет прочитана соединением. recv() в python. Это, похоже, не так, потому что я прошел через отладчик, а команда socket.accept() не запускается до команды [outputStream write: data].
Итак, каков правильный способ сделать это? Как получить объектный код c для подключения к сокету на стороне python, а затем отправить строки, которые может получить сокет. Я попытался отправить две разные строки назад, но это похоже на то, что метод write не вызывает функцию recv().
Заранее благодарен всем!
Я не был инициатором кода c до тех пор, пока сервер не сказал, что он слушает. Целевой код c просто работает в основной функции. И я на 99,99% уверен, что объявил класс как с NSStreamDelegate. Я все еще работаю прямо сейчас и не смогу проверить до сегодняшнего вечера. На стороне сервера я получаю сообщение о наличии соединения, а затем ждет входящую команду.Это инициируется линией, которая пытается отправить строку «привет от obj c», и фактическая строка никогда не кажется на сервере. Вы получаете разные результаты при запуске? – 12343211234
Да. Я получаю другой результат. См. Обновленный ответ. – jsondwyer
Спасибо за ответ. Я пройду через него, когда вернусь домой. Я взволнован, чтобы поиграть с ним – 12343211234