J'espère vraiment que quelqu'un pourra faire la lumière là-dessus. Je construis un client/serveur de discussion très simple en utilisant PHP et Flex. J'ai suivi de nombreux tutoriels et j'ai un serveur de travail en PHP et un client de travail dans Flex, sauf que si j'utilise le client sous Windows, je ne peux pas envoyer de messages. Lorsque j'envoie un message sur mon Mac, il est envoyé au serveur et envoyé à tous les clients, y compris les clients Windows que j'ai pu connecter. Le message s'affichera aussi sur les clients Windows, c'est seulement quand j'essaye d'envoyer depuis Windows que ça ne marche pas.Flex Sockets n'envoie pas de données sous Windows
J'ai essayé d'ajouter un fichier crossdomain.xml servi par un script PHP écoutant sur le port correct, mais aucun des clients ne semble jamais le demander, et si le client travaille sur Mac, je suppose qu'il devrait fonctionner Les fenêtres. En passant, j'exporte le projet sous la forme d'un fichier AIR (ne sais pas si cela fait une différence).
Je ne trouve rien à ce sujet donc je me demande si je suis stupide quelque part ou si j'ai besoin de prendre des mesures spéciales pour les clients Windows?
J'ai collé mon code client ci-dessous (je n'ai jamais posté sur Stack Overflow donc je m'excuse pour le manque de formatage du code, si possible quelqu'un pourrait expliquer comment le réparer?).
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.MouseEvent;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;
import flash.net.Socket;
public var socket:Socket;
// Run on windowComplete
protected function init():void {
btnConnect.addEventListener(MouseEvent.CLICK, onBtnConnectClick);
}
// Run on closing
protected function deinit():void {
if ((socket != null) && (socket.connected)) {
socket.close();
}
}
// Called when the "Connect" button is clicked
protected function onBtnConnectClick(e:MouseEvent):void {
if (txtServer.text != '') {
socket = new Socket();
socket.addEventListener(Event.CONNECT, onSocketConnect);
socket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketDataProgress);
socket.addEventListener(IOErrorEvent.IO_ERROR, onSocketIOError);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSocketSecurityError);
socket.connect(txtServer.text, new uint(txtPort.text));
btnSend.addEventListener(MouseEvent.CLICK, onBtnSendClick);
}
}
// Called when the "Send" button is clicked
protected function onBtnSendClick(e:MouseEvent):void {
if (txtChatMessage.text != '') {
txtChatWindow.text += 'You: '+ txtChatMessage.text +"\n";
socket.writeUTFBytes(txtUsername.text +': '+ txtChatMessage.text);
}
txtChatMessage.text = '';
}
// Called when the socket is connected
protected function onSocketConnect(e:Event):void {
txtChatWindow.text += 'Connected\n\n';
btnConnect.label = "Disconnect";
btnConnect.removeEventListener(MouseEvent.CLICK, onBtnConnectClick);
btnConnect.addEventListener(MouseEvent.CLICK, onSocketDisconnect);
}
// Called when the socket recieves data
protected function onSocketDataProgress(e:ProgressEvent):void {
var data:String = socket.readUTFBytes(socket.bytesAvailable);
txtChatWindow.text += data +"\n";
}
// Called when there is an IO Error on the socket
protected function onSocketIOError(e:IOErrorEvent):void {
txtChatWindow.text += e.text;
}
// Called when there is a security error on the socket
protected function onSocketSecurityError(e:SecurityErrorEvent):void {
txtChatWindow.text += e.text;
}
// Called when the "Disconnect" button is clicked
protected function onSocketDisconnect(e:MouseEvent):void {
if ((socket != null) && (socket.connected)) {
socket.close();
}
btnConnect.label = "Connect";
btnConnect.addEventListener(MouseEvent.CLICK, onBtnConnectClick);
}
pas directement lié à votre question, mais avez-vous essayé d'utiliser WebORB pour php? C'est tout un effort pour implémenter votre système de messagerie à partir de zéro en utilisant des sockets. –