簡體   English   中英

PHP服務器套接字從python客戶端套接字接收連續數據

[英]Php server socket receiving continuous data from python client socket

我試圖將數據從python客戶端套接字連續發送到php服務器套接字,我已經能夠發送一次數據並打印出來。 但是,如果我將服務器置於while循環中以繼續監聽,則不再打印輸出的數據。 如果我發回一些消息,它仍然會響應客戶端。

Python客戶端代碼(這將放置在每次我發送內容時都會調用的函數中):

import socket
import sys

def main():
    host = 'localhost'
    port = 5003  # The same port as used by the server
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    print >> sys.stderr, 'connecting to %s port %s' % (host, port)
    s.connect((host, port))
    s.sendall("Hello! Heartbeat 40!")
    data = s.recv(1024)
    s.close()
    print('Received', repr(data))
if __name__ == "__main__":
    main()

PHP服務器代碼:

<!DOCTYPE html>
<html>
<body>

<?php

// set some variables
$host = "127.0.0.1";
$port = 5003;
// don't timeout!
set_time_limit(0);
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
// start listening for connections
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");


while(true){
    // accept incoming connections
    // spawn another socket to handle communication
    $spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
    // read client input
    $input = socket_read($spawn, 1024) or die("Could not read input\n");
    // clean up input string
    $input = trim($input);
    echo "Client Message : ".$input;
   // socket_close($spawn);
}
socket_close($socket);



?>

</body>
</html>

PHP輸出不會立即發送到瀏覽器。 Httpd服務器等待php腳本完成,然后將整個輸出發送到客戶端。

while(true){在您的php腳本中無限期運行,直到死於socket_acceptsocket_read或超時為止。

您需要在循環中定義一個退出點,以最終停止腳本並將數據發送到瀏覽器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM