C # TcpListener с ActionScript

1

Я пытаюсь подключить С# с сценарием действий, чтобы я попытался это сделать, и он работал, и он подключился, но когда я попытался отправить файл writeUTF, я отлаживал свой сценарий действия и консольное приложение сразу закрывалось, и ничего не отображалось на нем, а swf загружает и BAM закрывается в течение 1 секунды

Я закодировал консольное приложение и просто добавил 5 строк в основную пустоту

static void Main(string[] args)
{
    TcpListener server = new TcpListener(IPAddress.Any, 3001);
    server.Start();
    TcpClient client = server.AcceptTcpClient();
    BinaryReader reader = new BinaryReader(client.GetStream(), Encoding.UTF8);
    Console.WriteLine(reader.ReadString());
}

И я также добавил этот скрипт действия в свой файл сценария действий fla file

var socket:Socket = new Socket("127.0.0.1", 3001);
socket.writeUTF("h");
socket.flush();

Когда я добавил вторую строку скрипта действия и последние 2 строки кода С#, он начал эту ошибку, где он сразу же закрылся. Прежде чем он начал это делать, я получил ошибку отладки, показанную ниже

Unable to read beyond the end of the stream

Ошибка возникает в строке, которую он пытается записать на консоль reader.ReadString(), но теперь он сразу закрывается.

Теги:
actionscript-3
flash

1 ответ

0

Есть несколько проблем в игре как на стороне ActionScript, так и на стороне сервера С#.

Клиент ActionScript

На стороне ActionScript вы сразу же записываете в сокет перед его подключением. Вам нужно дождаться подключения сокета, прослушивая Event.CONNECT.

Было бы также целесообразно прослушивать IOErrorEvent и SecurityErrorEvent для обработки ошибок и борьбы с нарушениями изолированной программной безопасности и междоменными политиками.

public var socket:Socket;

public function connect():void {
    socket = new Socket("127.0.0.1", 3001);
    socket.addEventListener(Event.CONNECT, connectHandler);
}

public function connectHandler(event:Event):void {
    socket.writeUTF("h");
    socket.flush();
    socket.close();
}

Сервер С#

На стороне сервера С# двоичный считыватель использует Read7BitEncodedInt для анализа длины строки. Это 32-разрядное сжатое целое целое формате несовместимо с методом writeUTF() ActionScript, который использует 16-разрядное целое число для длины строки.

Например, перейдите к StreamReader, чтобы увидеть, как работает ваш код.

public static void Main (string[] args)
{
    TcpListener server = new TcpListener (IPAddress.Any, 3001);
    server.Start ();
    TcpClient client = server.AcceptTcpClient ();
    StreamReader reader = new StreamReader (client.GetStream (), Encoding.UTF8);
    Console.WriteLine (reader.ReadLine ());
}

Вы можете расширить класс сокетов ActionScript для пользовательской writeUTF(), которая writeInt() будет writeInt() а затем writeUTFBytes() если вы хотите сохранить двоичные считыватели.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню