У меня есть сервер Java. Я пытаюсь создать приложение для iPhone, которое подключается к серверу. Также отправляет и получает сообщения. Я немного запутался в использовании CFReadStreamRef и CFWriteStreamRef. Как я могу соединить сокет с потоками успешно. Вот что у меня есть:
fd = socket(AF_INET, SOCK_STREAM, 0);
emset(&addr, 0, sizeof(addr));
addr.sin_len = sizeof(addr);
addr.sin_family = AF_INET;
addr.sin_port = htons(port);//0;
inet_aton("192.168.1.101", &addr.sin_addr.s_addr);
CFSocketContext context = { 0, self, NULL, NULL, NULL };
listeningSocket = CFSocketCreateWithNative( NULL, fd,kCFSocketConnectCallBack, AcceptCallback, &context);
CFDataRef connectAddr = CFDataCreate(NULL, (unsigned char *)&addr, sizeof(addr));
CFSocketConnectToAddress(self.listeningSocket, connectAddr, -1);
// As soon as i get the Connect call back into my function I try to pair the streams to the socket
CFReadStreamRef readStreamm;
CFWriteStreamRef writeStreamm;
CFStreamCreatePairWithSocket(NULL, CFSocketGetNative(listeningSocket), &readStreamm, &writeStreamm);
[readStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[writeStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[readStream open];
[writeStream open];
Однако, когда я пытаюсь писать или читать из потока, возвращается ошибка (-1). Другой вопрос, который я имею, если я использую readStream
или writeStream
open
, и если это было успешно. Это значит, что я уже подключен к серверу ?? или мне действительно нужно позвонить CFSocketConnectToAddress
. Я просто пытаюсь выяснить, нужно ли мне использовать как connectToAdderss, так и поток, открытый. Или я должен использовать один или другой.
Спасибо заранее.