우선, 시간을내어 읽어 주셔서 감사합니다. 나는 PHP 소켓에 이상한 문제가있다. localhost를 통해 작동하는 php 소켓 데몬에서 작업하고 있지만 LAN이나 다른 PC 외부에서 연결하려고하면 작동하지 않습니다. 내가 볼 수 있도록이 문제를 재현하기 위해 데몬을 매우 기본적인 소켓 연결로 간소화했습니다.PHP 소켓 - 로컬 호스트에서만 연결할 수 있습니다 (포트 포워딩 문제?)
기본적으로 여기에 senario가 있습니다. 포트 6667에있는 서버에서 소켓 데몬을 시작합니다. 데몬을 실행중인 로컬 컴퓨터의 텔넷 및 브라우저를 통해 데몬에 연결할 수 있지만 다른 컴퓨터에서는 액세스 할 수 없습니다. 데몬은 연결 시도를 보지 못합니다 만들어진.
내 포트가 포트 80을 차단하므로 문제가 더 복잡해 지므로 ISP에서 포트 80을 차단하므로 포트 8000을 사용하도록 dyndns와 라우터를 설정했습니다. 앞으로 포트 6667 내 서버에.
내가 다음 (seudo) URL을 입력, 브라우저에서 내 데몬에 액세스하려면 :
http://mydomain.com:8000/client.php
이 로컬 컴퓨터에서 작동하고 연결되지만, 다른 컴퓨터에서 데몬도하지 않습니다 연결이 시도되고 있는지 확인하십시오. 그러나,이 같은 포트를 지정하는 경우 :
http://mydomain.com:6667
내 데몬이 만들어지고 연결을 볼 수 없지만, 물론 다음 브라우저 클라이언트 페이지는 사용자가 데몬과 상호 작용하는 데 사용할 수있는로드가 없습니다를 .
클라이언트가 플래시 파일을 사용하여 소켓 연결 (jsocket)을 만들지 만 정책이 올바르지 않기 때문에 도메인 간 정책 파일이 아니라는 것을 알고 있으며 localhost를 통해 연결하면 정책 파일이 올바르게 제공됩니다. . 여기
는 단순화 된 데몬 코드입니다 :<?
// set some variables
$host = '0.0.0.0';
$port = 6667;
// don't timeout!
set_time_limit(0);
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
// start listening for connections
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");
// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
// read client input
$input = socket_read($spawn, 1024) or die("Could not read input\n");
// clean up input string
$input = trim($input);
// echo input back
$output = $input . "\n";
socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");
// close sockets
socket_close($spawn);
socket_close($socket);
?>
요약 :
내가 텔넷을 통해 다른 컴퓨터에서 연결할 수 있습니다,하지만 난에서 연결 수 없습니다 ... 텔넷 및 브라우저를 통해 로컬 호스트에서 연결할 수 있습니다 포트 8000이 지정 될 때 ip 또는 도메인 이름을 사용하는 다른 컴퓨터의 브라우저 디먼에 연결 시도가 표시되지 않습니다. 포트 6667을 지정하면 데몬은 연결 시도를 보지만 사용자에게는 쓸모가 없습니다. :(
이 문제에 어떤 도움을 주시면 감사하겠습니다! 감사합니다!
로컬 컴퓨터의 방화벽은 무엇입니까? –
방화벽이 비활성화되었습니다 ... –