먼저 PHP에서 소켓을 사용하기 위해서는 php.ini를 수정할 필요가 있습니다.
![](https://hellowsydney.co.kr/wp-content/uploads/2023/10/image-2.png)
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;
}
?>
답글 남기기