Всем привет!!!
У меня такая проблема:
Я создаю сокет сервер через TServerSocket на Delphi 7 и клиент на Флеше, используя XMLSocket.
Тк вот, вроде все работает как набо: сначала к серваку приходит сообщение <policy-file-request/> и сервер отпрвляет файл политики. Клиент переподключается.
А вот дальше непонятно: почему из Флеш-клиента могу отпралять сообщения, сервак их принимает, а вот когда сервер отправляет - то флеш уже не принимает =(
Получается, что сервер отправляет файл политики, а затем отказывается что-либо отправлять..
Вот такая печальная история.
Помогите пожалуйста решить проблему!!!!!
Проверяю на локальном компе без использования хостинга (ни локального, ни нелокального)
Код флеш:
Код AS3:
import flash.net.XMLSocket;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.DataEvent;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.system.Security;
import flash.events.SecurityErrorEvent;
var socket:XMLSocket = new XMLSocket();
Security.loadPolicyFile("192.168.1.1:1025");
socket.connect("192.168.1.1",1025);
socket.addEventListener(Event.CONNECT, onConnects);
socket.addEventListener(Event.CLOSE, onCloses);
socket.addEventListener(IOErrorEvent.IO_ERROR, onErrors);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onSec);
socket.addEventListener(DataEvent.DATA, onDatas);
function onSec(e:SecurityErrorEvent):void
{
Pan.text = String(e.text);
}
function onConnects(e:Event):void
{
Sys.text = 'Connected';
socket.send('Hello adm'+'\n');
}
function onErrors(e:IOErrorEvent):void
{
Sys.text = String(e.text);
}
function onDatas(e:DataEvent):void
{
var s:String = e.data;
trace(s);
}
function onCloses(e:Event):void
{
trace('Socket is disconnected');
}
Send.addEventListener(MouseEvent.CLICK, onSend);
function onSend(e:MouseEvent):void
{
socket.send(Mes.text);
Pan.appendText(Mes.text+"\n");
Mes.text = '';
}
Код Делви сервака:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
ServerSocket1: TServerSocket;
Memo2: TMemo;
Label1: TLabel;
Label2: TLabel;
Button3: TButton;
Memo3: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure Button3Click(Sender: TObject);
procedure ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket1.Port:=1025;
Memo1.Lines.Insert(0,'Server Starting...');
ServerSocket1.open;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ServerSocket1.Active:=false;
Memo1.lines.Insert(0,'Socket Stopped');
end;
procedure TForm1.ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
begin
memo1.lines.insert(0,'listening on port '+inttostr(serversocket1.port));
end;
procedure TForm1.ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
var s: String;
begin
s:='<?xml version="1.0"?>';
s:=s+'<cross-domain-policy>';
s:=s+'<allow-access-from domain="*" to-ports="*"/>';
s:=s+'</cross-domain-policy>'+#0;
s:= AnsiToUtf8(s);
ServerSocket1.Socket.Connections[0].SendText(s);
Memo1.Lines.Insert(0,'Client is accepted');
end;
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Insert(0,'Client is connected '+Socket.RemoteAddress);
end;
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Insert(0,'Client is DISconnected');
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo2.Lines.Insert(0,ServerSocket1.Socket.Connections[0].ReceiveText);
end;
procedure TForm1.Button3Click(Sender: TObject);
var i: integer;
begin
ServerSocket1.Socket.Connections[0].SendText(Memo3.Text);
Memo2.Lines.Insert(0,Memo3.Text);
end;
procedure TForm1.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
Memo1.lines.insert(0,IntToStr(ErrorCode));
end;
end.
Где Мемо1 - это ЛОГ
Мемо2 - окно сообщений
Мемо3 - написать сообщение
Буттон1 - включить сокет
Буттон3 - отправить