PHP 페이지와 C++ 코드 사이에 TCP 소켓 연결을 만들었습니다. 여기에 대한 C + + 코드입니다.PHP와 C++ 간의 소켓 연결
Server.cpp#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/stat.h>
#include <fcntl.h>
using namespace std;
int main(){
int create_socket,new_socket,fd;
int n;
socklen_t addrlen;
struct sockaddr_in address;
if ((create_socket = socket(AF_INET,SOCK_STREAM,0)) > 0)
cout<<"The socket was created\n";
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;//INADDR_ANY;inet_addr("localhost");
address.sin_port = htons(4000);
cout<<"\nworking";
if (bind(create_socket,(struct sockaddr *)&address,sizeof(address)) == 0)
cout<<"Binding Socket\n";
while(1){
listen(create_socket,3);
addrlen = sizeof(struct sockaddr_in);
cout<<"*************************\n";
new_socket = accept(create_socket,(struct sockaddr *)&address,&addrlen);
cout<<"*************************\n";
char dobj[1024];
if (new_socket > 0){
n = read(new_socket, dobj, 1023);
string query(dobj);
string strl(query);
string s, d;
istringstream iss(strl);
iss >> s;
iss >> d;
const char* source = s.c_str();
const char* dest = d.c_str();
printf("Here is the message: %s %s\n",source,dest);
n = write(new_socket, "I got your message", 18);
}
}
close(new_socket);
return close(create_socket);
}
과 PHP 코드는 index.php를
<?php
if (isset($_GET['submit'])){
$query = $_GET['query'];
echo $query;
error_reporting(E_ALL);
$service_port = 4000;
$address = "localhost";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false){
echo "Failed: ". socket_strerror(socket_last_error($socket))."\n";
}
echo "Attempting to connect to '$address' on port '$service_port'...'\n";
$result = socket_connect($socket, $address, $service_port);
if ($result === false){
echo "Failed: ". socket_strerror(socket_last_error($socket))."\n";
}
$in = $query;
$out = '';
echo "Sending...\n";
socket_send($socket, $in, strlen($in), MSG_WAITALL);
echo "OK.\n";
echo "Reading response:\n\n";
while ($out = socket_read($socket, 2048)) {
echo $out;
}
socket_close($socket);
}
?>
<html>
<head>
</head>
<body>
<form action="index.php" method="get">
Query: <input type="text" name="query">
<button type="submit" name="submit">Submit!</button>
</form>
</body>
</html>
내가 인덱스를 실행 browser.When에 터미널과 실행의 index.php에 Server.cpp를 실행합니다. 브라우저에서 PHP를 실행하고 "123456 7890"이라고 입력하면 서버는 터미널에서 메시지 123456 7890을 출력합니다.
하지만 서버가 브라우저에서 index.php에 "메시지를 받았습니다"라는 메시지를 다시 보낼 수 없습니다. Ctrl + C를 눌러 서버를 종료 할 때만 index.php에 메시지를 보내고 index.php 만 브라우저의 모든 내용을 표시합니다. 여기에 무슨 문제가 있습니까? Server.cpp에서 socket을 청취하고 메시지를 무한히 index.php로 보내고 싶습니다.
관련없는 내 대답을 확인,하지만 당신은 성공하지 오류를 확인하십시오. 오류를 확인하고 보고서를보고 무시하는 대신 오류를 처리해야합니다. –
사실, PHP에서 코드의 소켓 부분을 작성하고 터미널을 통해 실행하면됩니다. 잘 작동한다. 나는 브라우저에서 무슨 일이 일어 났는지 모른다. – skjindal93
효과가있었습니다. PHP 코드의 while 루프에서 echo $ out 라인 뒤에 "break"를 추가하면됩니다. 감사..:) – skjindal93