socket 연결을 위한 소켓 서버 + 소켓 클라이언트를 php 로 간단히 만들어 보도록 하겠습니다.
1. socket Server (25003 포트를 사용한다.)
<?php $host = "0.0.0.0"; $port = 25003; set_time_limit(0); // no timeout $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Could not create socket\n"); $result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n"); $result = socket_listen($socket, 3) or die("Could not set up socket listener\n"); do { $spawn = socket_accept($socket) or die("Could not accept incoming connection\n"); do { $input = socket_read($spawn, 1024) or die("Could not read input\n"); $input = trim($input); echo "Client Message : " . $input . "\n"; $response = 'received' . "\n"; socket_write($spawn, $response, strlen($response)) or die("Could not write output\n"); if ($input == 'quit') { break; } if ($input == 'shutdown') { socket_close($spawn); break 2; } } while (true); } while (true); socket_close($socket);
2. soket Client
<?php $host = "220.72.212.xxx"; $port = 25003; $message = "Hello Server"; echo "Message To server :".$message; // create socket $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n"); // connect to server $result = socket_connect($socket, $host, $port) or die("Could not connect to server\n"); // send string to server socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n"); // get server response $result = socket_read ($socket, 2048) or die("Could not read server response\n"); echo "\nReply From Server :".$result; // close socket socket_close($socket);
- 서버 실행
php server2_php.php
- 클라이언트 접속
[localhost socket_server]# php client_php.php
Message To server :Hello Server
Reply From Server :received
서버 접속시 refused 날때
1. 포트 열려있는지 확인
# 열려있지 않다. (25003) [localhost socket_server]# netstat -nlpt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:9080 0.0.0.0:* LISTEN 208582/docker-proxy tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1311/master tcp 0 0 0.0.0.0:9022 0.0.0.0:* LISTEN 208603/docker-proxy tcp 0 0 0.0.0.0:9285 0.0.0.0:* LISTEN 766375/docker-proxy tcp 0 0 0.0.0.0:9286 0.0.0.0:* LISTEN 766356/docker-proxy tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 208317/docker-proxy tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 766395/docker-proxy tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 952/sshd # 위와 같이 열려 있지 않으면 php server2_php.php 실행 # 열려있다 (25003) [root@localhost socket_server]# netstat -nlpt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:9080 0.0.0.0:* LISTEN 208582/docker-proxy tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1311/master tcp 0 0 0.0.0.0:9022 0.0.0.0:* LISTEN 208603/docker-proxy tcp 0 0 0.0.0.0:9285 0.0.0.0:* LISTEN 766375/docker-proxy tcp 0 0 0.0.0.0:9286 0.0.0.0:* LISTEN 766356/docker-proxy tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 208317/docker-proxy tcp 0 0 0.0.0.0:25003 0.0.0.0:* LISTEN 808197/php tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 766395/docker-proxy tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 952/sshd
2. 외부에서 접속되는지 확인 (telnet 사용)
telnet 1.1.1.1 25003
3. 방화벽 확인
firewall-cmd --list-all
4. 방화벽 포트 오픈
firewall-cmd --permanent --zone=public --add-port=25003/tcp
5. 방화벽 리로드
firewall-cmd --reload
'프로그래밍 > Php' 카테고리의 다른 글
php 디자인 패턴의 템플릿 메소드 패턴 크롤링 puppeteer 이용한 예제 (0) | 2023.02.02 |
---|---|
easyOCR 이미지 한글 추출 기능 (php, python, fetch 사용) (1) | 2021.10.28 |
PHP에서 Fetch API를 사용하여 JavaScript로 파일 업로드 (1) | 2021.10.28 |
php exec 사용하여 파이썬 호출후 한글이 안나올때 (0) | 2021.10.26 |
mysql error ERROR 1366 (HY000): Incorrect string value: '\xF0\x9F\x98\x9C' for column 'comment' at row 1 (0) | 2020.11.09 |