Я действительно надеюсь, что кто-то может пролить свет на это.Я строю очень простой чат-сервер / клиент, используя PHP и Flex.Я следовал многим учебникам и у меня есть работающий сервер на PHP и работающий клиент во Flex, за исключением того, что если я использую клиент в Windows, я не могу отправлять сообщения.
Когда я отправляю сообщение на моем Macон проходит на сервер и отправляется всем клиентам, включая любого клиента Windows, которого я, возможно, подключил.На самом деле сообщение также будет отображаться на клиентах Windows, только когда я пытаюсь отправить сообщение из Windows, оно не работает.
Я попытался добавить файл crossdomain.xml, обслуживаемый сценарием PHP, который прослушиваетправильный порт, но ни один из клиентов никогда не запрашивал его, и если клиент работает на Mac, я предположил, что он должен работать на Windows.Кстати, я экспортирую проект в виде файла AIR (не знаю, если это что-то меняет).
Я ничего не могу найти по этому поводу, так что мне интересно, где я где-то глуп?Мне нужно принять какие-то особые меры для клиентов Windows?
Я вставил свой код клиента ниже (я никогда не публиковал в Stack Overflow, поэтому извиняюсь за отсутствие форматирования кода, если возможно, кто-нибудь может объяснить, как исправитьэто?).
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);
}