Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Сокеты (http://www.flasher.ru/forum/showthread.php?t=179081)

Давид 06.05.2012 03:27

Сокеты
 
Здравствуйте с помощью As3 создал сокетное соединения с сервером
при нажаты клавиш, As3 записывает сообщения в сокет например вот так,
x5
x20x25x30y5y10
y15y20
y25y30x35
и т.д

мне нужно чтобы каждый сообщения записывался в сокет одельо. т.е так
x20
x25
x30
y5
y10
y15

как можно решить?
Код AS3:

   /* connect to socket */
var socket = new Socket("localhost", 1024);
      socket.connect; 
  socket.flush;
 
          /* state of connect to socket */       
socket.addEventListener(Event.CONNECT,socketConnected);
  function socketConnected(e:Event):void{
  trace("client - socket connected", socket.connected);
  }
 
          /* read the string from the socket*/
socket.addEventListener(ProgressEvent.SOCKET_DATA,socketData);
  function socketData(e:ProgressEvent):void{
  var x1='';
  var y1='';
  var read_socket=socket.readUTFBytes(socket.bytesAvailable);
    if (read_socket.indexOf('x')==0){
    for (var i=1; i<read_socket.length; i++){ 
      x1=x1+read_socket.charAt(i)
          }
    sqr.x=Number(x1)
    }
    if (read_socket.indexOf('y')==0){
    for (i=1; i<read_socket.length; i++){ 
      y1=y1+read_socket.charAt(i)
          }
    sqr.y=Number(y1)
    }
  trace(read_socket)
  }
 
 
 
        /*Move to sqr*/
var speed:Number = 5;
stage.addEventListener(KeyboardEvent.KEY_DOWN, downn);
 
  function downn(e:KeyboardEvent): void{
  if (e.keyCode==37){
    socket.writeUTFBytes('x'+sqr_i.x);        //write to socket
    socket.flush();
    sqr_i.x -= speed;
  }if(e.keyCode==39){
    socket.writeUTFBytes('x'+sqr_i.x);
    socket.flush();
    sqr_i.x += speed;
  }if(e.keyCode==38){
    socket.writeUTFBytes('y'+sqr_i.y);
    socket.flush();
    sqr_i.y -= speed;
  }if(e.keyCode==40){
    socket.writeUTFBytes('y'+sqr_i.y);
    socket.flush();
    sqr_i.y += speed;
  } 
  }
 
 
 
 
 
  socket.close;


-De- 06.05.2012 04:00

Обычно или разделяют сообщения неким спец. символом (например '\0') или пишут длину сообщения, а затем само сообщение.
Может и можно именно записать в сокет отдельно каждое сообщение, но гарантии, что они придут столькими же кусками, сколькими были отправлены - нет.

Давид 06.05.2012 11:36

Цитата:

Сообщение от -De- (Сообщение 1078392)
Может и можно именно записать в сокет отдельно каждое сообщение

как записать?

-De- 06.05.2012 12:45

Вы не поняли. Записать можно. Получить нельзя. То, что ушло несколькими кусками может прийти одним. То, что ушло одним - может прийти несколькими. Разве что делать паузы между отсылкой, ожидая подтверждения от сервера. Но не надо, делайте как выше написал.
Если совсем всё плохо, то XMLSocket попробуйте, там эти все склейки автоматом делаются.

Давид 06.05.2012 13:50

можете код дописать для XMLSocket?

-De- 06.05.2012 14:07

Всё не напишу. Смотрите справку.
Для отсылки вместо
Код AS3:

socket.writeUTFBytes('y'+sqr_i.y);
socket.flush();

писать
Код AS3:

socket.send('y'+sqr_i.y);

Для получения подписываться на DataEvent.DATA
Код AS3:

var read_socket=e.data;

PS: не пишите код в кадрах, не пишите код в Flash CS, используйте нормальное форматирование.

Давид 06.05.2012 14:32

кто нибудь, дописайте код пожалуйста

Добавлено через 7 часов 41 минуту
Тема актуальна помогитье дописать код с Socket на XMLSocket

gagaga 07.05.2012 11:58

я могу написать за деньги

Давид 07.05.2012 12:19

сколько?

-De- 07.05.2012 12:33

Если вы просмотрев справку по XMLSocket (там же пример есть!) и поковыряв его не смогли код выше спортировать - вы не сможете в дальнейшем работать с сокетами.
На сервере таки склеивать пакеты придется один хрен.


Часовой пояс GMT +4, время: 12:22.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.