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로 파일 업로드 (0) | 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 |