2013-07-09 3 views
1

들어오는 데이터를 수신하려면 소켓 서버를 만들어야합니다. socketSetup이라는 PHP를 만들고 페이지를로드 한 후 실행합니다. 파일 자체는 하위 디렉토리에 있으며 소켓을 주소에 바인드해야합니다.PHP를 올바르게 사용하여 소켓 연결을 수신 대기하는 방법은 무엇입니까?

는 다음과 같이이 가능합니까? 내 주요 쿼리는 바인딩 방법에 달려있다 ... 나는 단지 메인 도메인이나 서브 디렉토리에 바인드합니까?

$sock = socket_create(AF_INET, SOCK_STREAM, 0); 

socket_bind($sock, "http://mydomain.com/mysubdirectory, 80) or die('Could not bind to address'); 

감사

+0

http://devzone.zend.com/209/writing-socket-servers-in-php/ –

+0

@DanyCaissy 물론,하지만 내가 묻는 것은 아닙니다. 내가 요구하는 바는 바인딩 용 주소도 PHP 파일이 듣고있는 도메인 또는 정확한 디렉토리일까요? – jskidd3

답변

1

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
... :: : 어떤 주소에 나는 내 서버 응용 프로그램을 결합해야 하는가? ::: ... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

권장 : 0.0.0.0 // 사용 가능한 모든 주소에 바인딩합니다.

당신이 무엇을하고 있는지 알고 있다면 라우터에 의해 기기에 할당 된 IP를 사용해야합니다. 당신이 당신의 로컬 네트워크 외부 패킷을 기다리고있는 경우에만 요구된다.

그렇지 않으면 127.0.0.1에서 바인딩해야합니다.

컴퓨터에 할당 된 IP는 다음과 같습니다.
예 : 192.168.1.5
는 넷 마스크 : - : 당신과 함께 주소를 검색 할 수 있습니다

255.255.255.0 <이 그것을 찾기


, 쉬운 방법을 무시 $_SERVER['SERVER_ADDR']하지만 당신은 에 의존해서는 안된다. 그것을 찾기

, 하드 코딩 방법 : 창에

: 유형 ipconfig/all을의 IPv4 주소 항목을 검색합니다.
Linux의 경우 : ifconfig
콘솔에 액세스 할 수없는 경우 phpinfo(); < - 확실하지http://www.example.com/dir/에 바인딩


그것에 대해 것은 잘못이며 이제까지 작동하지 않습니다.


주의 : 그 라우터 작업이기 때문에 기계는 주로 을 외부 IP에 대해 아무것도 (128.31.53.90 즉, DSLAM가 할당 한 일을) 모르는 .

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 으로 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
... ::: 포트
을 서버 응용 프로그램에 바인드해야합니까? ::: ... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

클라이언트가 전송 데이터를 받으면 라우터 에 먼저이 도착합니다. 그러면 누가 그걸 처리할지 결정합니다. 결정은 라우터 NAT 테이블과 수신 포트를 기반으로합니다.

는 NAT 테이블은 일반적으로 다음과 같습니다

  Header   Data 
+===================+===============+ 
|-| Your External IP |  ...  | 
|X|     |  ...  | 
|-| Destination Port |  ...  | 
+===================+===============+ 

라우터는 destination port을하고 비슷한 incoming port 항목을 검색합니다

+==============================================+ 
| LAN IP | Incoming Port | Outgoing Port | 
+============+=================+===============+ 
|192.168.1.5 |  8080  |  80  | 
+------------+-----------------+---------------+ 
|192.168.1.2 |  25  |  25  | 
+------------+-----------------+---------------+ 

하자가 다음과 같은 구조로 패킷하기 x 표에서
그 중 하나를 찾으면 ,210 일치 LAN IP로 패킷 : 예를 들어 포트

발신 :

패킷이 목적지 포트 8080에 도착, 그것은 192.168.1.5:80에 전달됩니다. 당신이 포트에 패킷을 대기하는 경우

 >>     25   >>  192.168.1.2:25 

따라서, 패킷이 8080에서 사람이 보내 잡으려고 당신은 192.168.1.5:80에
25을 바인드해야 25

주의 :이 01,230,558을 실행하는 경우을 실패 포트 80 바인딩웹 서버
포트는 기본적으로 해당 포트에 바인딩됩니다 (변경하지 않은 경우).

+0

환상적인 답변입니다. 매우 감사합니다! – jskidd3

+0

@JoelKidd 답변이 아직 준비되지 않았습니다. 가능한 한 명확하게하기 위해 노력하고 있습니다. –

+0

@JoelKidd 완료되었습니다. –

관련 문제