알찬정보 툰코 개발 트렌드 이슈 코딩

알찬정보 툰코 개발 트렌드 이슈 코딩

  • php socket 통신

    hellowsydney8010

    2023년 10월 04일
    미분류
    php socket 통신

    먼저 PHP에서 소켓을 사용하기 위해서는 php.ini를 수정할 필요가 있습니다.

     extension=sockets가 (;)로 주석처리가 되어 있는데 이 부분을 제거하면 됩니다.

    <?php

    $address=”127.0.0.1″;    

    $port=9001;        

    $c_sock=array();

    $c_info=array();

    $s_sock= socket_create(AF_INET,SOCK_STREAM,SOL_TCP);

    if($s_sock===false){

    echo”socket_create() Error! reason :”.socket_strerror(socket_last_error()) . “\n”;

    echo”<br/>”;

        }else{

    echo”소켓 생성 성공”;

        }

    //서버 소켓에 주소와 포트번호 부여

        socket_bind($s_sock, $address, $port) or die(‘Could not bind to address’); 

    //서버 소켓을 클라이언트 대기 상태로 만듦

        socket_listen($s_sock);        

    while(true){

    $sockArr=array_merge(array($s_sock),$c_sock);

    //소켓 이벤트 대기

    if(socket_select($sockArr, $tWrite=NULL, $tExcept=NULL, 10) >0){            

                foreach($sockArras$sock){

    //새로운 클라이언트 접속

    if($sock==$s_sock){

    //접속 허용

    $t_socket= socket_accept($s_sock);

    //클라이언트 접속정보 가져오기

                        socket_getpeername($t_socket,$sock_ip,$sock_port);

    //해당 클라이언트 접속정보를 소켓배열에 input

    $c_sock[$t_socket] =$t_socket;

    $c_info[$t_socket] =array(‘ip’=>$sock_ip,’port’=>$sock_port);

                        msg(“client connect : “.$sockIp.”:”.$sockPort.”\n”);

                    }else{ //접속해있는 클라이언트일경우 이벤트발생함을 의미

    $buf= socket_read($sock, 4096);

    //접속종료

    if(!$buf){

                            exceptSocket(&$c_sock, &$c_info, $sock);

                            msg(“client connection broken : “.$sockIp.”:”.$sockPort.”\n”);                        

                        }else{//이벤트 작성

    $in=”hello socket server!!”;

                            socket_write($sock, $in);

                            socket_close($$sock);

                        }

                    }

                }            

            }

        }

    function exceptSocket(&$sockSet, &$infoSet, $sock)

        {

            unset($sockSet[$sock]);

            unset($infoSet[$sock]);

    // array_merge 함수에서 error 발생을 막기위한 처리

    if(count($sockSet)==0)

            {

    $sockSet=array();

    $infoSet=array();

            }

        }    

    function msg($msg){

    echo”SERVER >> “.$msg;

        }

    ?>

    다음
    이전

    답글 남기기 응답 취소

    이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Subscribe to Our Newsletter!

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Subscribe Now

Copyright © 2023 Sydney Note

Design by ThemesDNA.com