Правильно, я хочу создать соединение с моим сервером (TCP Open) для этого Я изучаю с этим tutorial из apple docs (Нет, я не хочу использовать другие проекты). Ниже мой код:Настройка Socket Streams не работает
ViewController.h
@interface ViewController : UIViewController <NSStreamDelegate>{
}
@property (nonatomic, retain) NSInputStream *inputStream;
@property (nonatomic, retain) NSOutputStream *outputStream;
@end
ViewController.m
- (IBAction)searchForSite:(id)sender
{
NSString *urlStr = @"http://mysitefake.com/host.php";
if (![urlStr isEqualToString:@""]) {
NSURL *website = [NSURL URLWithString:urlStr];
if (!website) {
NSLog(@"is not a valid URL");
return;
}
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)[website host], 80, &readStream, &writeStream);
inputStream = (__bridge_transfer NSInputStream *)readStream;
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];
/* Store a reference to the input and output streams so that
they don't go away.... */
}
}
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {
switch(eventCode) {
case NSStreamEventHasSpaceAvailable:
{
NSLog(@"has space available");
if (stream == outputStream) {
NSLog(@"Equals");
NSString * str = [NSString stringWithFormat:
@"String to send to my server"];
const uint8_t *rawstring = (const uint8_t *)[str UTF8String];
[outputStream write:rawstring maxLength:10240];
[outputStream close];
}else{
NSLog(@"Not equals");
}
break;
}
default:
break;
}
}
И в моем сервере есть PHP-файл со следующим кодом:
host.php
<?php
error_reporting(E_ALL);
/* Get the port for the WWW service. */
$service_port = getservbyname('www', 'tcp');
/* Get the IP address for the target host. */
$address = gethostbyname('www.mysitefake.com');
/* Create a TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: reason: " .
socket_strerror(socket_last_error()) . "\n";
}
echo "Attempting to connect to '$address' on port '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
echo "socket_connect() failed.\nReason: ($result) " .
socket_strerror(socket_last_error($socket)) . "\n";
}
$in = "HEAD/HTTP/1.1\r\n";
$in .= "Host: www.mysite.com\r\n";
$in .= "Connection: Close\r\n\r\n";
$out = '';
echo "Sending HTTP HEAD request...";
socket_write($socket, $in, strlen($in));
echo "OK.\n";
echo "Reading response:\n\n";
while ($out = socket_read($socket, 2048)) {
echo $out;
}
socket_close($socket);
?>
Большой выход из PHP файла:
Попытка подключиться к 'Фиктивный Ip' порт '80' ... Отправка HTTP запрос HEAD, ... OK. Чтение ответа: HTTP/1.1 200 OK Дата: Вс, 03 Янв 2016 15:53:10 GMT Сервер: Apache Cache-Control: max-age = 31536000 Истекает: пн, 02 янв 2017 15:53:10 GMT Вариа: Accept-Encoding, User-Agent Connection: закрыть Content-Type: text/html; кодировка = UTF-8
Выход из приложения является:
Имеет доступное пространство Равно
Кажется, что что-то было послано, но когда я пытаюсь проверить его в хозяина .php Я не вижу сообщение, которое было отправлено, которое в этом случае было «String для отправки на мой сервер».
В чем проблема с моим кодом?