php 로 소켓 프로그램 만들기 (다중 처리 불가, queue 진행 방식)
- 본 예제는 client 의 다중 접속 처리가 되지 않는 1 client 를 위한 코드 입니다.
동시에 두개의 요청이 들어오게 되면 먼저 들어온 요청 처리 후, 대기 되었던 두번째 요청을 처리하게 됩니다.
- 본 예제는 server 에서 보내주는 메세지를 client 에서 확인하는 예제입니다.
1. 서버에서 데몬 생성
# vi server.php
#!/usr/local/php/bin/php -q // php 실행 파일 <?php set_time_limit(0); // 작업을 마칠때까지 세션을 끊지 않음 define("_IP", "192.168.10.2"); // 서버 IP define("_PORT", "443"); // 서버에서 사용할 PORT $sSock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_bind($sSock, _IP, _PORT); socket_listen($sSock); while($cSock = socket_accept($sSock)) { socket_getpeername($cSock, $addr, $port); echo "SERVER >> client connected $addr:$port \n"; $date = date("Y/m/d H:i:s"); socket_write($cSock, $date); socket_close($cSock); echo "SERVER >> client Close.\n"; } ?> |
실행 권한 부여 및 작성후 데몬 구동
# chmod 700 server.php
# ./server.php &
2. 클라이언트에서 접속 파일 생성
# vi client.php
#!/usr/bin/php -q // php 실행 파일 <?php set_time_limit(0); // 작업을 마칠때까지 세션을 끊지 않음 define("_IP", "192.168.10.2"); // 서버 IP define("_PORT", "443"); // 서버에서 사용하는 PORT $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_connect($sock, _IP, _PORT); echo "CLIENT >> socket connect to "._IP.":"._PORT."\n"; $date = socket_read($sock, 4096); echo "CLIENT >> this time is $date \n"; socket_close($sock); echo "CLIENT >> socket closed.\n"; ?> |
3. 테스트
client 에서 생성한 client.php 파일을 실행합니다.
# ./client.php
CLIENT >> socket connect to 192.168.10.2:443
CLIENT >> this time is 2016/10/14 13:27:49
CLIENT >> socket closed.
* 참고로 (client 접속 당시) 서버 콘솔에 출력된 메세지 입니다.
SERVER >> client connected 192.168.10.3:44450
SERVER >> client Close.
* 내용 추가
client 에서 server 로 메세지를 보내기 위해서는 각각의 파일에 아래 내용을 추가해줍니다.
# vi client.php
$message="Hero"; socket_write($sock, $message, strlen($message)) or die("Could not send data to server\n"); |
# vi server.php
$input = socket_read($cSock, 4096) or die("Could not read input\n"); echo "$input"; |
'프로그래밍 > PHP' 카테고리의 다른 글
php 로 소켓 프로그램 만들기 (다중 처리, 멀티스레드) (0) | 2016.10.28 |
---|---|
값이 배열 안에 존재하는지 확인하는 in_array함수 (0) | 2016.10.17 |
한글 및 공백이 포함된 URL 주소를 UTF-8 로 변환 (urlencode) (0) | 2015.12.10 |
파일 첨부하여 메일 보내기 (0) | 2015.06.23 |
특정 날짜로 요일 알아내기 (0) | 2015.06.11 |