2016-07-15 3 views
2

그래서 Apache 웹 사이트 (WAMP)에서 텍스트 파일을 가져올 수 있도록 호스트 된 웹 사이트 (online.com이라고합시다)를 얻으려고합니다.localhost에 대한 소켓 연결 시간이 초과되었습니다.

그러나 온라인 코드를 잠깐 실행하면 오류 100 (시간 초과)이 표시됩니다. 나는 이유를 모른다.

저는 소켓을 사용하고 있습니다. 내 PC의 방화벽에서 online.com에 대한 IP 목록을 허용했습니다. 수신 포트를 Apache 서버에 추가했습니다. 나는 포트 포워딩을 수행했다. (정확히 했어도 100 % 확신 할 수는 없지만).

다음은 위의 더 상징적 인 표현입니다. 나는를 실행하면

포트 포워딩

online.com's IP = X, port = 80 
local host's IP = (used ipconfig) IPV4 Address, port = Y 

아파치

Listening on port Y 

화이트

Added IP X 

을 나열 online.com

if (!($sock = socket_create(AF_INET, SOCK_STREAM, 0))) 
{ 
    $errorcode = socket_last_error(); 
    $errormsg = socket_strerror($errorcode); 
    die("Couldn't create socket: [$errorcode] $errormsg \n"); 
} 

echo "Socket created \n"; 

// Connect socket to remote server 


**if (!socket_connect($sock, 'IP X', PORTY))** 
{ 
    $errorcode = socket_last_error(); 
    $errormsg = socket_strerror($errorcode); 
    die("Could not connect: [$errorcode] $errormsg \n"); 
} 

echo "Connection established \n"; 
$message = "GET/PRCC /HTTP/1.1 \r\n\r\n"; 

// Send the message to the server 

if (!socket_send($sock, $message, strlen($message) , 0)) 
{ 
    $errorcode = socket_last_error(); 
    $errormsg = socket_strerror($errorcode); 
    die("Could not send data: [$errorcode] $errormsg \n"); 
} 

echo "Message send successfully \n"; 
$buf = ""; 

// Now receive reply from server 

if (socket_recv($sock, $buf, 2045, MSG_WAITALL) === FALSE) 
{ 
    $errorcode = socket_last_error(); 
    $errormsg = socket_strerror($errorcode); 
    die("Could not receive data: [$errorcode] $errormsg \n"); 
} 

// print the received message 

echo $buf . "this is the buffer"; 
socket_close($sock); 

라인 if(!socket_connect($sock , 'IP X' , PORT Y))에 PHP 스크립트는 문제의 원인입니다.

무엇이 잘못 될 수 있는지에 대한 제안은 크게 감사하겠습니다.

+0

무엇이 오류 메시지입니까? 연결이 실패한 후 die()가 특정 오류를 반환합니까? – gladiola

답변

0

왜 소켓을 사용하고 있습니까? file_get_contents()으로 홈 IP에 ​​대한 일반 HTTP 요청을 시도하십시오.

예,

<?php 

$text_file1 = file_get_contents("http://YOUR_IP:PORT/PRCC"); 
// so on.. 
+0

나는 그것을 시도 할 것이다, 대단히 감사한다. 그것이 어떻게되는지 알려주십시오 – devonrimmington

+0

이 솔루션은 제가 필요로하는 것입니다. 난 아파치 설정 중 일부를 변경하고 올바른 포트를 열어야했지만 이제는 내 핸드폰에서 액세스 할 수 있습니다! 당신의 대답을 받아 들였습니다 – devonrimmington

0

은 실례합니다, 지금이 클라이언트 측 코드는 것을 알고 있습니다.

연결 방법은 일반적으로 서버에서 적절한 응답이 전송 될 때까지 잠자기 상태가됩니다. 이 클라이언트에 응답하려고 시도하는 소켓 서버 프로그램을 확인하십니까? 이를 확인하는 한 가지 방법은 서버 측에서 각 연결 시도를 나타내는 로그 항목을 작성하는 것입니다.

코드가 그냥 앉아서 오류를 제공하지 않는 경우 코드가 정상적으로 기다리고있을 수 있습니다.

소켓의 클라이언트 - 서버 시스템에 대한 실험 코드를 작성하는 경우 연결, 바인딩, 보내기, 수신, 수신, 수신 및 닫기와 같은 모든 시점에서 오류를 검사하는 데 도움이 될 수 있습니다.

+0

소켓과 관련된 다른 것들로 전진하기 전에 캐리의 해결책을 시도 할 것입니다. – devonrimmington