Ich benutze PHP als Server auf localhost. Ich benutze Python als Client.Wie schreibe ich Server für Chat-Programm in PHP mit Socket
Ich möchte das: Client wird Nachricht an den Server senden. Server sendet die gleiche Nachricht an Clients. Und alle Clients zeigen die Nachricht, die gesendet wird. Aber wenn ich 2 Clients öffne, können die Clients keine Antwort vom Server erhalten, wenn sie eine Nachricht senden.
Wie kann ich einen Server mit PHP schreiben, der richtig funktioniert? Irgendeine Idee?
server.php:
<?php
error_reporting(E_ALL);
set_time_limit(0);
header("Content-Type: text/plain; charset=UTF-8");
define("HOST", "127.0.0.1");
define("PORT", 28028);
a:
$socket = socket_create(AF_INET, SOCK_STREAM, 0) 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, 50) or die("Could not set up socket listener\n");
$error = 0;
while (true){
$error = 0;
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
$input = socket_read($spawn, 1024);
if (!$input) {
$error = 1;
}
if (socket_write($spawn, $input, strlen($input)) === false){
$error = 1;
}
if ($error){
goto a;
}
}
socket_close($spawn);
socket_close($socket);
client.py:
from socket import *
from threading import Thread
import sys
HOST = 'localhost'
PORT = 28028
BUFSIZE = 1024
ADDR = (HOST, PORT)
tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)
def recv():
while True:
data = tcpCliSock.recv(BUFSIZE)
if not data: sys.exit(0)
print data
Thread(target=recv).start()
while True:
data = raw_input('> ')
if not data: break
tcpCliSock.send(data)
tcpCliSock.close()